Error: Can't set headers after they are sent. in nodejs
Error: Can't set headers after they are sent. in nodejs
我 运行 在我的应用程序下面显示错误,第 413 行指向下面代码中的“res.json(stat); // return in JSON format.
”,我查看了其他有类似错误的帖子,但是 none帮了我,为什么我会遇到这个错误?感谢任何关于如何修复它的指导?
app.post('/api/botjobs.json', function(req, res) {
// console.log(req.body)
data = req.body;
var temp = {};
temp.radar = data.radar;
temp.request = data.request;
if(temp.request == 'cloneradar'){
temp['params.clonetype'] = data.params.clonetype;
}
now = new Date();
data["updated"] = now;
// console.log('DATA:')
// console.log(data)
// console.log('TEMP:')
// console.log(temp)
botjobs.findOne(temp, {}, { sort:{'_id': -1}}, function(err, findstat){
// console.log(findstat)
// console.log(err)
// console.log("inside botjobs findOne");
if(findstat != null){
// console.log('updating entry')
//console.log(findstat);
data['numupdated'] = findstat['numupdated']+1;
// console.log(data);
botjobs.update({'_id':findstat['_id']},data,{ upsert : true, multi: true },function(err,stat){
if (err)
res.send(err);
res.json(stat); // return in JSON format
});
}
else{
// console.log('creating new entry')
data["created"] = now;
data['numupdated'] = 0;
botjobs.create(data,function(err, stat) {
// console.log(stat);
// if there is an error retrieving, send the error. nothing after res.send(err) will execute
if (err)
res.send(err);
res.json(stat); // return in JSON format. —> line 413 in route.js
});
}
});
});
错误:-
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:350:11)
at ServerResponse.res.setHeader (/app/node_modules/express/node_modules/connect/lib/patch.js:134:22)
at ServerResponse.res.set.res.header (/app/node_modules/express/lib/response.js:595:10)
at ServerResponse.res.send (/app/node_modules/express/lib/response.js:151:12)
at ServerResponse.res.json (/app/node_modules/express/lib/response.js:237:15)
at /app/app/routes.js:413:10
尝试用 return res.send(err);
代替每个 res.send()
的 res.send(err);
您可以添加这样的条件
if (err)
{
res.send(err);
}
else
{
res.json(stat);
}
"Can't set headers after they are sent",当你试图在响应已经发送的情况下发送一些东西时,就会发生这个错误。 res.send()
结束响应,因此您无法在 res.send()
之后发送任何内容。您收到此错误的原因是更新调用可能返回错误,因此 res.send()
被调用,它位于 if 块内。
为了避免在您的情况下无法设置 headers 错误,您需要将 if-else 块包裹起来,如下所示:
if (err){
res.send(err);
}else{
res.json(stat);
}
这将解决无法设置 headers 的问题,但您的代码仍然可能失败,因为我认为您的更新方法失败了。
我 运行 在我的应用程序下面显示错误,第 413 行指向下面代码中的“res.json(stat); // return in JSON format.
”,我查看了其他有类似错误的帖子,但是 none帮了我,为什么我会遇到这个错误?感谢任何关于如何修复它的指导?
app.post('/api/botjobs.json', function(req, res) {
// console.log(req.body)
data = req.body;
var temp = {};
temp.radar = data.radar;
temp.request = data.request;
if(temp.request == 'cloneradar'){
temp['params.clonetype'] = data.params.clonetype;
}
now = new Date();
data["updated"] = now;
// console.log('DATA:')
// console.log(data)
// console.log('TEMP:')
// console.log(temp)
botjobs.findOne(temp, {}, { sort:{'_id': -1}}, function(err, findstat){
// console.log(findstat)
// console.log(err)
// console.log("inside botjobs findOne");
if(findstat != null){
// console.log('updating entry')
//console.log(findstat);
data['numupdated'] = findstat['numupdated']+1;
// console.log(data);
botjobs.update({'_id':findstat['_id']},data,{ upsert : true, multi: true },function(err,stat){
if (err)
res.send(err);
res.json(stat); // return in JSON format
});
}
else{
// console.log('creating new entry')
data["created"] = now;
data['numupdated'] = 0;
botjobs.create(data,function(err, stat) {
// console.log(stat);
// if there is an error retrieving, send the error. nothing after res.send(err) will execute
if (err)
res.send(err);
res.json(stat); // return in JSON format. —> line 413 in route.js
});
}
});
});
错误:-
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:350:11)
at ServerResponse.res.setHeader (/app/node_modules/express/node_modules/connect/lib/patch.js:134:22)
at ServerResponse.res.set.res.header (/app/node_modules/express/lib/response.js:595:10)
at ServerResponse.res.send (/app/node_modules/express/lib/response.js:151:12)
at ServerResponse.res.json (/app/node_modules/express/lib/response.js:237:15)
at /app/app/routes.js:413:10
尝试用 return res.send(err);
代替每个 res.send()
res.send(err);
您可以添加这样的条件
if (err)
{
res.send(err);
}
else
{
res.json(stat);
}
"Can't set headers after they are sent",当你试图在响应已经发送的情况下发送一些东西时,就会发生这个错误。 res.send()
结束响应,因此您无法在 res.send()
之后发送任何内容。您收到此错误的原因是更新调用可能返回错误,因此 res.send()
被调用,它位于 if 块内。
为了避免在您的情况下无法设置 headers 错误,您需要将 if-else 块包裹起来,如下所示:
if (err){
res.send(err);
}else{
res.json(stat);
}
这将解决无法设置 headers 的问题,但您的代码仍然可能失败,因为我认为您的更新方法失败了。