我很难过,理解为什么它执行res.json()两次。
// GET - Get MY Applications
router.get('/myApplications', function(req, res) {
var taskid;
var app_length;
Application.find({ email: req.session.email}, function(err, application){
app_length = application.length;
var getMyTasks = [];
for(var i = 0; i < app_length; i++){
taskid = application[i].task_id;
Task.findOne({task_id:application[i].task_id}, function(err, result){
if(i = app_length - 1){
console.log("final");
res.json({getMyTasks});
console.log("after final");
}
else if(err){
return res.send(err);
}
else if(!result){
Application.findOneAndUpdate({$and:[{email:req.session.email, task_id:taskid}]},{$set:{status:1}},{new:true}, function(err, myapp){
getMyTasks.push(myapp);
});
}
else if(result){
getMyTasks.push(result);
}
});
}
});
});
通过执行两次,它给了我着名的Error: Can't set headers after they are sent.
这是确切的错误:
final
after final
final
events.js:160
throw er; // Unhandled 'error' event
^
Error: Can't set headers after they are sent.
我们可以清楚地看到res.json正在执行两次。
这个错误发生在我所拥有的地方:
if ( i = app.length - 1){}
答案 0 :(得分:1)
单个等于赋值,所以
if(i = app_length - 1)
多次为真,这意味着
res.json({getMyTasks});
多次执行。它必须是
if(i === app_length - 1)