如何从setTimeout回调发送HTTP响应-Express

时间:2019-06-24 12:37:59

标签: javascript node.js express

我想让自定义响应超时,以便在处理时间超过特定间隔时尝试从setTimeout回调发送响应。

在下面的示例中,我将 20ms 设置为必须处理services.getReport()的超时时间,否则API必须将响应发送为response_timed_out

以下代码可以正常工作,但会引发类似

的异常
  

将标头发送到客户端后无法设置

router.post("/getReport", (req, res) => {
  setTimeout(() => {
    res.send({ status:503, msg: "response_timed_out" });
  }, 20);
  services.getReport(req, res);
});

1 个答案:

答案 0 :(得分:3)

您可以在请求对象上使用setTimeout方法来定义每个路由的超时时间。

router.post("/getReport", (req, res) => {
  req.setTimeout(2000);
  services.getReport(req, res);
});

您还可以全局定义服务器上所有路由的超时时间。

const server = app.listen(port, () => {});
server.setTimeout(15000);

您还可以提供第二个参数,即发生超时时将运行的回调。如果您需要回调,则可以在响应中调用setTimeout

router.post("/getReport", (req, res) => {
  res.setTimeout(2000, () => res.send('timed_out'));
  services.getReport(req, res);
});