Can't set headersanimatorset afterr they are sent.怎么解决

项目的代码中时常抛出在Can't set headers after they are sent的异常,应该怎么解决? - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
自己写的一个web服务后台中时常会因为Can’t set headers after they are sent的异常而崩溃,从字面意思理解应该是respnse执行两次回复导致,代码逻辑较复杂定位执行两次的原因工作量比较大,简单的try/catch感觉又不是治本之策,所以在此问下大家这种情况要怎么处理,一个简单的想法是在send之前判断response的有效性,就不知道express提供了这样的API没有
就不能 console.log 一下堆栈信息?
可以的呀,但是还是比较难定位
感觉你这思路是不对滴~为什么会出现这个,因为调用了不止一次response.send吧,或者就是在send调用之后又setHeader了,这是非法且没有意义的操作。这肯定是代码错误,走了双重逻辑。举个简单的错误例子:
fn (err, data){//fn是任意产生数据的函数
callback(err);//错!没有return
callback(null, data);
假如此处callback是这样的:
function(err, data){
response.setHeader(&Content-type&, &application/json&);
response.send(data);
那必然出错~慢慢排查吧!
楼上正解,简单点的方法就是在express错误处理之前做个中间处理,将该处理捕获的异常直接catch后忽略掉,当然治本的话还是要自己排查找原因
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的Can't set headers after they are sent 怎么解决 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
遇到Can’t set headers after they are sent
但是我的render都有return呀,为什么会出现这样的错误?
嗯,这是多次渲染出现的问题,把有输出的地方都边注释边调应该就很快出来了。
多次渲染会有啥问题呀?,我是写了return render(‘homepage’, {name:xxx})好几次,
在不同的函数里,不过影响应该不大把?
一次请求就只能调用一次 res.render。
我也遇到了,比较坑
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的获取数据时报错:Can't set headers after they are sent. - CNode技术社区
有志者,事竟成!
http.js:690
throw new Error('Can\'t set headers after they are sent.');
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:690:11)
at ServerResponse.header (/home/maschzh/workspace/u9blogsApp/node_modules/express/lib/response.js:666:10)
at ServerResponse.json (/home/maschzh/workspace/u9blogsApp/node_modules/express/lib/response.js:232:10)
at Promise.exports.topicOne (/home/maschzh/workspace/u9blogsApp/controllers/topic.js:65:14)
at Promise.onResolve (/home/maschzh/workspace/u9blogsApp/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
at Promise.emit (events.js:95:17)
at Promise.emit (/home/maschzh/workspace/u9blogsApp/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
at Promise.fulfill (/home/maschzh/workspace/u9blogsApp/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
at schema (/home/maschzh/workspace/u9blogsApp/node_modules/mongoose/lib/query.js:1400:13)
at model.Document.init (/home/maschzh/workspace/u9blogsApp/node_modules/mongoose/lib/document.js:254:11)
exports.topicOne = function (req, res, next){
Topic.findById(req.params.topicId, function (err, topic){
return next(err);
return res.json(topic.doc);
排查下流程里的所有中间件,会否是在其他的中间件里做了会set headers的操作了但没有 return掉?
代码贴得不够。前面res有返回。
问题已经解决了,在return res.json(topic.doc);之前加设置一下状态就解决了
怎么设置 的
在return res.json(topic.doc);之前加了res.status(200);就可以了
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的

我要回帖

更多关于 android setfillafter 的文章

 

随机推荐