当调用res json时,mongoose被执行两次而不是一次

时间:2017-03-25 03:18:07

标签: json node.js mongodb express mongoose

我很难过,理解为什么它执行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){}

1 个答案:

答案 0 :(得分:1)

单个等于赋值,所以

if(i = app_length - 1)

多次为真,这意味着

res.json({getMyTasks});

多次执行。它必须是

if(i === app_length - 1)