在nodejs代码中使用res.json()时获取空数组

时间:2018-06-22 07:41:16

标签: javascript node.js

我有一个代码段,其中显示了所有帖子以及帖子的用户名,并且用户显示了图片(DP)。这些代码片段运行正常,日志输出也很完美,但是我无法将其作为JSON对象发布。

这是我的代码:

router.get('/get_posts',jwt, function(req,res){
    var send = [];

    post.find({}).populate({ path:'author', model: User }).exec(function(err,res){
    var send = [];
    if(err)
    {console.log(err,err.stack);}
    if(res){
          for(var i=0;i<res.length;i++)
    {
     send.push({username:res[i].author.username,dp:res[i].author.dp,subject:res[i].subject,Body:res[i].Body,nofppl:res[i].nofppl});
    }
    console.log(send);
      }
    });
    res.json(send);
    });

记录结果完美:

[ 
 { 
  username: 'sonic',
  dp: '',
  subject: 'ckjndckldsnck',
  Body: 'xekjf ckjfcnkjfcnfrnrfncfjcfrjnfcjnccfr',
  nofppl: 25 
  },
 { 
  username: 'sonic',
  dp: '',
  subject: 'ckjndckldsnck',
  Body: 'xekjf ckjfcnkjfcnfrnrfncfjcfrjnfcjnccfr',
  nofppl: 25 
  },
  { 
  username: 'sonic',
  dp: '',
  subject: 'ckjndckldsnck',
  Body: 'xekjf ckjfcnkjfcnfrnrfncfjcfrjnfcjnccfr',
  nofppl: 25 
  }
 ]

(我刚刚在同一篇文章中发布了3次,该代码段有效,不是只在响应中发布此数据)

我得到一个空数组作为响应。

响应:

[]

因此,在将所有对象都推入数组之前会抛出某种数组,我该怎么办?

4 个答案:

答案 0 :(得分:0)

您有一个异步调用post.find({})

因此res.json(send)在构建您的json的异步回调之前被调用。这就是为什么结果为空的原因。

您应该在exec函数中执行res.json(xxx)

答案 1 :(得分:0)

send变量可能有问题,并且您从范围之外返回json,并且还有一个大括号。仔细检查您的代码

post.find({}).populate({ path: 'author', model: User }).exec(function (err, res) {
    var data = [];
    if (err) { console.log(err, err.stack); }
    if (res) {
        for (var i = 0; i < res.length; i++) {
         data.push({ username: res[i].author.username, dp: res[i].author.dp, subject: res[i].subject, Body: res[i].Body, nofppl: res[i].nofppl });
        }
        res.json(data);
        return;
    }
});

答案 2 :(得分:0)

尝试下面的代码,它应该可以工作,在Java脚本中使用send is关键字使用其他键创建数组,然后调用全局send数组,这就是为什么您变空的原因。

 router.get('/get_posts',jwt, function(req,res){
 var array = [];
  post.find({}).populate({ path:'author', model: User }).exec(function(err,result){
   if(err)
    {
     console.log(err,err.stack);
    }
 if(result){
  for(var i=0;i<result.length;i++)
    {
    array.push({
        username:result[i].author.username,
        dp:result[i].author.dp,
        subject:result[i].subject,
        Body:result[i].Body,
        nofppl:result[i].nofppl
    });
      }
    console.log(array);
    res.json(array);
     }
  });
  });

答案 3 :(得分:0)

有时可能是由于混合使用res变量名引起的:

router.get('/get_posts',jwt, function(req,res){
  getData().then(res => {
     res.json({ res });
  })
});