2016-01-27 103 views
0

在node.js中提交表單後,我收到一個重定向錯誤消息,因此在將數據插入到mongodb後,我收到一條錯誤消息「無法設置他們發送後的標題「。Node.js重定向錯誤:發送後無法設置標題

var friendslist = JSON.parse(JSON.stringify(req.body)); 

    for(var i=0; i<friendslist.length; i++){ 
     var userid = friendslist[i]; 
     var name = friendslist[i]; 
     var number = friendslist[i]; 
     var status = friendslist[i]; 
     var currentUserid = friendslist[i]; 

     var friends = [{"userid" : userid.name, 
         "name" : name.name, 
         "number" : number.number, 
         "status" : status.status, 
         "currentUserid" : currentUserid.currentUserid}]; 

     collection.insert(friends, function(err, docs) { 
      if (err) { 
       res.json({error : "database error"}); 
      } 
      else { 
       collection.find().toArray(function(err, users) { 
        res.json(users); 
       }); 
      } 
     }); 
    } 

所以在插入所有數據到mongodb後,我發送一個json響應給用戶,但在那之後,我得到了這個錯誤信息。

請通過我的帖子,並建議我一些解決方案。

+0

我猜這還不是全部的話,在什麼地方'res.json'你有一些正在輸出內容,如'res.send','res.render'等什麼是可能發生的是,你發送了一些東西,然後你嘗試發送'json',它試圖設置某些標題,但是在內容已經發送之後它不能設置標題。 – adeneo

+0

您正在循環運行'collection.insert'代碼。一旦完成第一次插入,響應被髮送到客戶端,對於第二次迭代,將沒有「下行鏈路」連接,因爲它已經在第一次迭代中完成。您必須插入所有集合,然後在完成操作後調用'res.json'封裝'promise'並調用'promise.all'。 – Nirus

回答

0

首先,如果您期待響應,請不要在循環中進行數據庫調用。 另外,使用快遞時,只有當您準備好將數據發送回用戶時,才撥打res.sendres.json

var friendslist = JSON.parse(JSON.stringify(req.body)); 
var friends = []; 
for(var i=0; i<friendslist.length; i++){ 
    var friend = friendslist[i] 

    friends.push({ 
     "userid" : friend.userid, 
     "name" : friend.name, 
     "number" : friend.number, 
     "status" : friend.status, 
     "currentUserid" : friend.currentUserid 
    }); 
} 

collection.insert(friends, function(err, docs) { 
    if (err) { 
     res.json({error : "database error"}); 
    } 
    else { 
     collection.find().toArray(function(err, users) { 
      res.json(users); 
     }); 
    } 
}); 
相關問題