项目的代码中时常抛出在Can't set headers after they are sent的异常,应该怎么解决?
自己写的一个web服务后台中时常会因为Can’t set headers after they are sent的异常而崩溃,从字面意思理解应该是respnse执行两次回复导致,代码逻辑较复杂定位执行两次的原因工作量比较大,简单的try/catch感觉又不是治本之策,所以在此问下大家这种情况要怎么处理,一个简单的想法是在send之前判断response的有效性,就不知道express提供了这样的API没有
4 回复
就不能 console.log 一下堆栈信息?
可以的呀,但是还是比较难定位
感觉你这思路是不对滴~为什么会出现这个,因为调用了不止一次response.send吧,或者就是在send调用之后又setHeader了,这是非法且没有意义的操作。这肯定是代码错误,走了双重逻辑。举个简单的错误例子:
fn (err, data){//fn是任意产生数据的函数
if(err){
callback(err);//错!没有return
}
callback(null, data);
}
假如此处callback是这样的:
function(err, data){
response.setHeader("Content-type", "application/json");
response.send(data);
}
那必然出错~慢慢排查吧!
楼上正解,简单点的方法就是在express错误处理之前做个中间处理,将该处理捕获的异常直接catch后忽略掉,当然治本的话还是要自己排查找原因