在节点js中使用for循环?

时间:2017-09-10 19:39:38

标签: javascript node.js express

我正在使用for循环从mongodb检索数据并将其显示在浏览器上,但问题是它只是第一次迭代并停止。所以我只得到第一个条目作为输出。而它在控制台日志中提供了正确的输出。请帮帮忙?

var movieSchema1 = new mongoose.Schema({
  name:String,
  address:String,
  location:String
});

var user=mongoose.model('movie', movieSchema1, 'movie');

for (var i = 0; i < user.length; i++) {
  res.json("iteration " + i);
  res.json('name:' + user[i].name + user[i].address);
}

2 个答案:

答案 0 :(得分:2)

正如其他人所说,为你的回复建立一个对象,然后是res.json()它。因为您正在尝试发送数组,所以只需使用.map()来转换每个数组:

//turn the array of users into the objects we want to send
const responseData = user.map( (movie, i) => {
   return {
      iteration: i,
      name: movie.name + ' ' + movie.address
   };
});

//this converts the array to a string for you
res.json( responseData );

答案 1 :(得分:0)

您可以使用find()方法接收架构中的所有对象。

var response;  

user.find({}, function(err, users){
       if(err) throw err;
       if(users.length != 0){
          response = users.map((user, i) => {
             return {
               index: i,
               name: user.name + ' ' + user.address
             };             
       }
    })
    for(var i = 0; i < response.length; i++){
       res.write('Key: ' i + ' the value: ' response[i] + '\n');
    }
    res.end();

您还应该只使用res.json()一次,因为它会返回Can't set headers after they are sent 错误

有关res.json()

的信息,请参阅 this link