报错:Error: Can't set headers after they are sent,怎么解决?
使用response.end()发送响应时,在此前加一个return,即return response.end(),类似的response.send()等函数也要加return,而且是所有的地方都要加,即使是a请求的响应没加return,当b请求到来时,也会报错。
一、问题说明
在请求时 ,出现这种问题,一定是因为,浏览器请求一次之后,服务器却返回两次及两次以上的响应。
这种容易发生在异步回调中:
Movie.fetch(function (err,movies) { if(err) { res.redirect('/') } res.render('index',{ title:'首页', movies:movies }); });如果fetch抛出错误,服务器返回重定向的响应,但是后面又再一次返回另一个响应。此时将出现:
Error: Can't set headers after they are sent
二、解决方案
在每次的请求处理中,一旦服务器返回响应,就即使的使用return,避免出现一次请求后,返回两次响应。
Movie.fetch(function (err,movies) { if(err) { return res.redirect('/') } res.render('index',{ title:'首页', movies:movies }); });