2016-01-27 79 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); 
     }); 
    } 
}); 
相关问题