Error: Can't set headers after they are sent错误之坑

来源:互联网 发布:黄鹤财富网络借贷 编辑:程序博客网 时间:2024/05/17 05:56

      报错:Error: Can't set headers after they are sent,怎么解决?

     使用response.end()发送响应时,在此前加一个return,即return response.end(),类似的response.send()等函数也要加return,而且是所有的地方都要加,即使是a请求的响应没加return,当b请求到来时,也会报错。

     如果是冲着解决问题来的,看完上面就应该知道了。下面是吐槽,而且没有原理说明。

     吐槽

      最近在鼓捣自娱自乐的个人项目时,发现了express的这个坑。只要试图设置响应header,就会报错 Error: Can't set headers after they are sent,有时候虽然报错,但是能正常访问,有时候则不能。

     查了一些资料后,都说是在response.end或者response.send等结束请求的操作时要调用return,经过多次尝试之后,确实是这样的,但是有个很不理解的情况。

     作为一个程序员,我一直认为当遇到一个莫名其妙的问题时,只要你按照程序执行的顺序一行一行人工走一遍,不管什么问题,你一定能发现。但这次express给我上了一课,就是我按照程序走一遍,return也加了,还是报错,正当我以为不是这个原因时,突然灵机一动,我走的只是这个请求可能执行的代码,其他代码我还没有改,return也没有加,会不会有影响呢?抱着试一试的态度,全部加了return后,我擦!还真是这样,我还能说什么呢?

     至于为什么会这样,当时解决问题时已经是半夜2点多了,后来也一直没有提起兴趣去看源码,就不了了之了。

阅读全文
0 0