节点服务器,套接字,请求和响应超时

nde*_*ker 16 node.js express

问题

2分钟后节点的默认配置超时请求.我想将请求超时更改为:

  • 1分钟的"正常"请求
  • 提供静态文件的请求需要5分钟(在这种情况下是大资产)
  • 上传8小时(每次请求几千张图片)

研究

通过Node的文档阅读,我发现有很多方法可以定义超时.

  1. server.setTimeout
  2. socket.setTimeout
  3. request.setTimeout
  4. response.setTimeout

我正在使用Express,它还提供中间件来定义(特定)路由的超时.我试过了,没有成功.

我对如何在全局和每条路由上正确配置超时限制感到困惑.我应该配置以上所有超时吗?如何设置服务器的超时与设置套接字或请求的超时不同?

小智 4

正如我在您关于超时中间件的使用的其他问题中看到的,您以某种方式使用它。

请参阅超时连接中间件的文档。

将您的 errorHandler 函数作为 EventListener 添加到请求中,因为它是一个 EventEmitter 并且中间件会导致它发出 -event timeout

req.on("timeout", function (evt) {
    if (req.timedout) {
      if (!res.headersSent) {
        res
          .status(408)
          .send({
            success: true,
            message: 'Timeout error'
        });
      }
    }
}); 
Run Code Online (Sandbox Code Playgroud)

这是在中间件堆栈之外调用的,导致函数调用next(err)无效。另外,您必须记住,如果在请求挂起服务器端时发生超时,您必须阻止服务器代码进一步处理此请求(因为标头已发送,其底层连接将不再可用) )。