Node.js “快速中间件”;“连接超时”;原因“;Can';t在发送标题后设置标题。”;

Node.js “快速中间件”;“连接超时”;原因“;Can';t在发送标题后设置标题。”;,node.js,express,connect-timeout,Node.js,Express,Connect Timeout,我的代码: timeout = require('connect-timeout') app.get('/', timeout('5s'), function(req, res){ ##DO SOMETHING 1 ##DO SOMETHING 2 ##DO SOMETHING 3 res.send('ok'); ##line 7 }); 当用户请求时。Node.js处理“做一些事情1-3”。但在它处理之前。中间件响应超时,因为它已设置为5秒。然后在第7行中再次尝试响应。其原

我的代码:

timeout = require('connect-timeout')

app.get('/', timeout('5s'), function(req, res){
  ##DO SOMETHING 1
  ##DO SOMETHING 2
  ##DO SOMETHING 3
  res.send('ok'); ##line 7
});
当用户请求时。Node.js处理“做一些事情1-3”。但在它处理之前。中间件响应超时,因为它已设置为5秒。然后在第7行中再次尝试响应。其原因是错误“发送后无法设置标题。”


如何处理这个问题?

我觉得这是一个常见的问题,所以我搜索并找到了

在这个回答中,我将概述我在上面链接的问题中提出的两种可能的解决方案:

  • 在调用
    res.send
    之前,您可以通过属性检查请求是否超时:

    app.get('/', timeout('5s'), function(req, res){
      ##DO SOMETHING 1
      ##DO SOMETHING 2
      ##DO SOMETHING 3
      if (!req.timedout) {
        res.send('ok'); ##line 7
      }
    });
    
  • 或者,您可以安装一些顶级中间件来有效地抑制错误:

    app.use(function(req,res,next){
      var _send = res.send;
      var sent = false;
      res.send = function(data){
          if(sent) return;
          _send.bind(res)(data);
          sent = true;
      };
      next();
    });