问题
2分钟后节点的默认配置超时请求。我想将请求超时更改为:
研究
通过Node's documentation阅读,我发现有很多方法可以定义超时。
我正在使用Express,它还提供middleware来定义(特定)路由的超时。我试过了,without success。
问题
我对如何在全局和每条路由上正确配置超时限制感到困惑。我应该配置以上所有超时吗?如何设置服务器的超时与设置套接字或请求的超时不同?
答案 0 :(得分:3)
<强> server.timeout 强>
<强> server.setTimeout 强>
<强> socket.setTimeout 强>
<强> response.setTimeout 强>
<强> request.setTimeout 强>
这正是您所需要的,但回调需要结束请求/响应。由于超时仅触发回调,因此不会更改状态或干扰连接。这是回调工作。
我不建议触摸这些,因为在大多数情况下不需要。除非您希望在2分钟内允许连接空闲(无流量)。
答案 1 :(得分:3)
正如我在your other question concerning the usage of the timeout middleware上看到的那样,你以不同的方式使用它。
请参阅timeout-connect middleware.
的文档将errorHandler-function作为EventListener添加到请求中,因为它是一个EventEmitter,中间件使它发出timeout
- 事件:
req.on("timeout", function (evt) {
if (req.timedout) {
if (!res.headersSent) {
res
.status(408)
.send({
success: true,
message: 'Timeout error'
});
}
}
});
这在中间件堆栈之外调用,导致对next(err)
的函数调用无效。此外,您必须记住,如果在请求挂在服务器端时发生超时,则必须阻止服务器代码进一步处理此请求(因为标头已经发送且其基础连接将不再可用)。
答案 2 :(得分:2)
已经有一个Connect Middleware for Timeout支持。你可以尝试这个中间件。
var timeout = express.timeout // express v3 and below
var timeout = require('connect-timeout'); //express v4
app.use(timeout(120000)); // should be changed with your desire time
app.use(haltOnTimedout);
function haltOnTimedout(req, res, next){
if (!req.timedout) next();
}