我正在尝试调试Can't set headers after they are sent
node.js Express 应用程序中的可怕错误。具体来说,我正在使用knox库与 s3 对话。
粗略地说,我有这个 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
大概response.writeHead
是在调用 knox s3client 的响应回调之前在某处被调用或触发。是否有一些调试标志或其他方法可以让 Node 在调用 writeHead 时/在哪里吐出?节点 0.10 添加了一个response.headersSent
,但是通过检查此标志来填充我的代码和所有 3rd 方库以找出调用它的位置将非常困难。还是有其他方法可以解决这个问题?