2015-10-14 79 views
0

我的代码:Express中间件“连接超时”导致“发送后无法设置标头”。

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处理“DO SOMETHING1-3”。但在处理之前。超时中间件响应,因为它已被设置为5秒。之后,在第7行路由尝试再次响应。其原因错误“发送后无法设置标题”。

如何处理该问题?

回答

0

我有一种感觉,这将是一个普遍的问题,所以我搜查了GitHub repository,发现this issue

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

  1. 你可以检查,看看是否请求调用res.send之前通过req.timedout财产超时:

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

    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(); 
    }); 
    
相关问题