gpt4 book ai didi

javascript - 如何使用 mongoose 中的用户对象 id 数组返回文档数组?

转载 作者:行者123 更新时间:2023-12-02 22:54:22 30 4
gpt4 key购买 nike

我正在尝试创建一个带有用户身份验证和授权的简单后端博客 API。它是用 mongoose 和 express 构建的。在我的 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 函数中正确返回,我似乎也无法 res.send(blogs) 。

有更好的方法吗?

最佳答案

您可以不使用循环,如下所示

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

关于javascript - 如何使用 mongoose 中的用户对象 id 数组返回文档数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58055967/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com