【问题标题】:Enque queries until express server is ready to respondEnque 查询直到 express 服务器准备好响应
【发布时间】:2019-09-26 20:28:17
【问题描述】:

我有一个快速应用程序,它在启动后会从外部源获取外部数据。在应用程序中获取数据之前,这将使用默认模板响应所有查询。

在最初的 3 或 4 秒内,应用会使用该模板进行响应,然后正常运行。

这实际上是一个问题。我想避免这种默认响应。我想检查(在服务器运行后)是否已获取数据,然后等到准备好发送正确的响应。

也就是说,尽管最初的几秒钟,客户端会觉得应用程序很慢,这将始终收到正确的响应。

【问题讨论】:

  • 修复服务器。
  • 在您调用 res.end()(或 res.send/json/render)之前,它们已经“入队”了。究竟是什么阻止了您在获取任何数据之前不发送“默认响应”?
  • 数据将在内存中获取一次,并且仅在开始时使用异步方法。也就是说,服务器正在运行而没有响应所需的信息。如果在获取期间(3-4 秒),任何来自路由的请求都不会解决任何问题,它将使用中间件使用默认模板处理默认错误。我不想同步数据获取。相反,如果一个请求即将到来并且没有数据可用,那么该请求应该等到数据被获取,然后才给出响应

标签: javascript node.js express


【解决方案1】:

我做了这样的事情:

async function fun (req, res, next)  {
    while (!sitemap['/'] && Object.keys(sitemap).length == 0) {
        await new Promise(done => setTimeout(done, 20));
    }
    next();
}

app.use(fun);

我想,这是一个虚拟的解决方案,但显然有效。我强制获取数据至少需要 10 秒,并使用此函数作为中间件,客户端一直等待,直到服务器完成加载其数据。

也许有人可以告诉我它是否可以。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2018-12-03
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多