node.js - Node 服务器、套接字、请求和响应超时

标签 node.js express

问题

Node 的默认配置会在 2 分钟后超时请求。我想将请求超时更改为:

  • “正常”请求 1 分钟
  • 提供静态文件(在本例中为大 Assets )的请求需要 5 分钟
  • 8 小时上传(每个请求几千张图片)

研究

通读Node's documentation ,我发现定义超时的方法有很多种。

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

我正在使用 Express,它还提供 middleware为(特定)路由定义超时。我试过了,without success .

问题

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

最佳答案

正如我在 your other question concerning the usage of the timeout middleware 上看到的那样,您使用它的方式有所不同。

参见 timeout-connect middleware. 的文档

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

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

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

关于node.js - Node 服务器、套接字、请求和响应超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926213/

相关文章:

node.js - 如何从移动应用程序中的私有(private) api 获取背景的即时变化?

javascript - node.js 在 JPEG 中创建/修改 Exif

node.js - morgan 记录器并未记录所有要归档的内容

node.js - Express.js 带有斜杠的路由参数

node.js - 模仿 Passport 身份验证行为

javascript - 将数组从 websocket 发送到客户端

node.js - 无法使用 Express.js 更改网站图标

javascript - 使用 Node.js、request 和 Cheerio 从网站上抓取链接?

javascript - 使用 Passport JS 获取当前登录的用户名?

node.js - Nest 无法解析 RegisterService 的依赖关系(?)。请确保索引 [0] 处的参数在 RegisterModule 上下文中可用