我有一个代码段,其中显示了所有帖子以及帖子的用户名,并且用户显示了图片(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次,该代码段有效,不是只在响应中发布此数据)
我得到一个空数组作为响应。
响应:
[]
因此,在将所有对象都推入数组之前会抛出某种数组,我该怎么办?
答案 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 });
})
});