在 NodeJS 代码中获取 res.json() 时获取空数组



我有一个代码片段,显示所有帖子以及帖子的用户名和用户显示图片(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 次相同的帖子,片段有效,我不想只在回复中发布这些数据(

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

回应:

[]

所以,在所有对象被推入数组之前,数组就会被抛出,我该怎么办?

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

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);
}
});
});

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

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

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

发送变量可能有问题,并且您从范围之外返回 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;
}
});

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

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

最新更新