我的代码:
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 :(得分:0)
我觉得这是一个常见的问题,因此我搜索了GitHub repository并找到this issue。
在这个答案中,我将概述我在上面链接的问题中提出的两种可能的解决方案:
您可以在致电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
}
});
或您可以安装一些有效抑制错误的顶级中间件:
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();
});