gpt4 book ai didi

javascript - Mongoose Populate 以获取用户的所有帖子返回空数组

转载 作者:行者123 更新时间:2023-12-01 00:49:01 27 4
gpt4 key购买 nike

我正在尝试更好地掌握 Express.js,并尝试创建一个简单的博客网站。

我的用户模型很简单:用户名、显示名称和一系列帖子。

const userSchema = new Schema({
username: {
type: String,
required: true,
unique: true,
trim: true,
minlength: 3
},
displayname: {
type: String,
required: true,
minlength: 1
},
posts: [{ type: Schema.Types.ObjectId, ref: 'Post' }]
}, {
timestamps: true,
});

我的帖子模型也是如此:内容和作者。

const postSchema = new Schema({
body: {
type: String,
required: true,
minlength: 1,
maxlength: 140
},
author: { type: Schema.Types.ObjectId, ref: 'User', required: true }
});

我已成功创建新用户并发布内容:

[
{
"posts": [],
"_id": "5d32c9474e28f66c08119198",
"username": "Prince",
"displayname": "The Artist",
"createdAt": "2019-07-20T07:56:55.405Z",
"updatedAt": "2019-07-20T07:56:55.405Z",
"__v": 0
}
]

[
{
"_id": "5d34af1ecae7e41a40b46b5a",
"body": "This is my first post.",
"author": "5d32c9474e28f66c08119198",
"__v": 0
}
]

这是我创建用户和帖子的路线

//Create a user
router.route('/create').post((req, res) => {
const username = req.body.username;
const displayname = req.body.displayname;

const newUser = new User({
username,
displayname
});

newUser.save()
.then(() => res.json('New user created!'))
.catch(err => res.status(400).json(`Error: ${err}`));
});
//Create A Post
router.route('/create').post((req, res) => {
const body = req.body.body;
const author = req.body.author;
const newPost = new Post({
body,
author
});

newPost.save()
.then(() => res.json('Created new post!'))
.catch(err => res.status(400).json(`Error: ${err}`));
});

以及我获取用户所有帖子的方法:

//Get all posts by user
router.route('/posts/:id').get((req, res) => {
User.findById(req.params.id)
.populate('posts')
.exec((err, user) => {
if(err) {
res.status(400).json(`Error: ${err}`);
} else {
res.json(user.posts);
}
});
});

每当我查看/users/posts/:id 的响应时,数组都是空的,但我希望它会填充用户使用我提供的 ID 发布的帖子?我是否误解了填充的工作原理?

最佳答案

您需要将帖子 ID 添加到用户帖子列表中,以便 mongoose 的填充能够正常工作。

router.post('/create' async (req, res) => {
const body = req.body.body;
const author = req.body.author;
const newPost = new Post({
body,
author
});
try {
const user = await User.findById(author);
const post = await newPost.save()
user.posts = user.posts.concat(post._id)
await user.save()
return res.json(post.toJSON())
} catch (e) {
return res.status(400).json(`Error: ${e}`));
}
});

关于javascript - Mongoose Populate 以获取用户的所有帖子返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136184/

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