我将尝试调试 node.js Express 应用程序中可怕的“Can't set headers after they are sent”错误。具体来说,我正在使用 knox 库与 s3 进行通信。
大致上,我有这个 Express 处理程序,使用 knox s3client 的全局实例:
如果我在区域A设置任何标题或状态代码在
可能在knox s3client的响应回调之前某处调用了
大致上,我有这个 Express 处理程序,使用 knox s3client 的全局实例:
function foo(req, res) {
//Region A
var s3req = global.s3client.get('foo').on('response', function(s3res){
//Region B
res.set('content-length', s3res.headers['content-length']); //This will fail
s3res.on('data', function(chunk){
res.write(chunk);
});
});
//Region C
s3req.end();
}
如果我在区域A设置任何标题或状态代码在
res
上,一切正常。如果我在区域B尝试任何这样的操作,我会得到“无法在发送后设置标头”的错误。请注意,我想在res
而不是s3res
上设置标题。可能在knox s3client的响应回调之前某处调用了
response.writeHead
。是否有一些调试标志或其他方法可以让Node输出writeHead何时/在哪里被调用?Node 0.10添加了response.headersSent
,但是将我的代码和所有第三方库与此标志的检查填满以找出调用位置将是难以实现的。还是有其他方法可以解决这个问题吗?