我想让自定义响应超时,以便在处理时间超过特定间隔时尝试从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);
});
答案 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);
});