无法使用for循环将Node.js发送请求的数据发送回客户端

时间:2017-04-28 10:21:52

标签: node.js for-loop post request

我有一个帖子请求,我需要在数组中循环,找到数据库中的用户并将结果发送回视图,但我似乎只能回送第一个用户。如何实现for循环?我不能在循环中使用re.send而res.JSON给了我相同的结果。 我的代码发送回第一个用户:

app.post('/rankcandidates', function(req, res){
    var array = JSON.parse(req.body.array);

    for (var i = 0;i<array[0].length;i++){
      User.find({"_id" : { "$in" : [ array[0][i]._id] }
      }).exec(function (err, result) {
          res.setHeader('Content-Header', 'application/json');
          res.send(JSON.stringify(result));
          // also tried res.JSON but doesn't work 
      });
    }
});

我的Ajax电话:

   $.post("/rankcandidates",
          { array:JSON.stringify(array) },
          function(data,status){
            console.log(data); // comes out as a string of the first user
          }
   });

新问题 - 使用for循环将对象插入数据库:

   app.post('/insertPositionIndex', function(req, res){
    var array = JSON.parse(req.body.array);
    console.log(array[0]); // data shown below
    var ids;
    var indexes;

    for (var i=0;i<array.length;i++){

     ids = array[i][0].map(function(element) { return element.position_id });
     indexes = array[i][0].map(function(element) { return element.index_position });
     console.log(ids);
     console.log(indexes);
}

        User.update(
          { "_id": req.user._id},
            {
            "$push":
                {
                 "positionsApplied":{
                   position_id: ids,
                   index_position: indexes
                 }
                }
            }
        ).exec(function (err, result) {

               res.json({ results: result });
          });

    });

enter image description here

收到以下错误: enter image description here

1 个答案:

答案 0 :(得分:1)

一个请求只能返回一个响应。 在您的情况下,您应首先创建用户ID数组,然后查询用户集合,搜索其id与该数组的一个元素匹配的所有用户。这是一个解决方案:

app.post('/rankcandidates', function(req, res){
    var array = JSON.parse(req.body.array);
    var ids = array[0].map(function(element) { return element._id })
    User.find({"_id" : { "$in" : ids }})
     .exec(function (err, results) {
          res.json(results);
      });
});