2017-03-25 50 views
0

我真的很難過,理解它爲什麼執行res.json()兩次。貓鼬當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

一個等於是分配,所以

if(i = app_length - 1) 

是真正的多倍,這意味着

res.json({getMyTasks}); 

得到執行多次。它需要是

if(i === app_length - 1) 
+0

jeeeez我怎麼錯過了。 – user3450754

+0

這是怎麼沒有崩潰的應用程序? – Darkrum

+0

這是,錯誤被拋出 –