[英]How do I return an array of documents using an array of users object ids in mongoose?
我正在尝试使用用户身份验证和授权创建一个简单的后端博客 api。 它是用 mongoose 和快递建造的。 在我的 userSchema 中,我有一个属性,它是一个名为“subscribedTo”的数组。 在这里,用户可以订阅不同的用户来获取他们的博客。 subscribedTo 数组存储了希望订阅的用户的 objectID。
这是我的代码:
router.get('/blogs', auth, async (req, res) => {
//auth middleware attaches user to the request obj
try {
let blogs = []
req.user.subscribedTo.forEach(async (id) => {
let ownersBlogs = await Blog.find({owner:id})
blogs = [...blogs, ...ownersBlogs]
console.log(blogs)//consoles desired output of users blogs
})
console.log(blogs)//runs first and returns []
res.send(blogs)
}catch(e){
res.status(500).send(e)
}
})
当我对这条路线使用 postman 时,它返回 [] 这是可以理解的。 即使 blogs 变量在 forEach function 中正确返回,我似乎也无法 res.send(blogs)。
有一个更好的方法吗?
Blog.find({owner:{$in:[array of ids]}});
您可以使用没有循环,如下所示
Blog.find({ owner: { $in: req.user.subscribedTo } }, function (err, blogResult) {
if (err) {
response.send(err);
} else {
response.send(blogResult);
}
});
或者
循环完成后发送响应,如下所示
router.get('/blogs', auth, async (req, res) => {
//auth middleware attaches user to the request obj
try {
let blogs = []
let len = req.user.subscribedTo.length;
let i = 0;
if (len > 0) {
req.user.subscribedTo.forEach(async (id) => {
let ownersBlogs = await Blog.find({ owner: id })
blogs = [...blogs, ...ownersBlogs]
console.log(blogs)//consoles desired output of users blogs
i++;
if (i === len) {
//send response when loop reached at the end
res.send(blogs)
}
})
} else {
res.send(blogs);
}
} catch (e) {
res.status(500).send(e)
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.