假设我有一个带有/ posts端点的API。我的Mongoose模式中的每个帖子都有对创建它的用户的引用,每个用户都有对他们创建的帖子的引用数组。
以登录用户身份发布时,为了保存该引用,我需要将当前登录用户ID以及该帖子的内容发送到/ posts端点。我不希望通过/ users /:id / posts之类的嵌套查询来这样做,然后发送req.params.id。我想直接发布到/ posts,但是以某种方式发送user.id。
用户模型:
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
posts: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}]
});
帖子模型:
const PostSchema = new Schema({
content: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
},
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
});
创建新帖子(需要一种获取用户ID的方法,因为它实际上不在req.params中)
exports.createPost = async function(req, res, next) {
try {
const { content } = req.body; // ideally would get user ID from here
const post = await db.Post.create({
content,
user: req.params.id
});
const postUser = await db.User.findById(req.params.id);
postUser.posts.push(post.id);
await postUser.save();
const newPost = await db.Post.findById(post.id);
const {id, created} = newPost;
return res.status(201).json({
id,
content,
created
})
}
catch(err) {
return next(err);
}
}
我知道我可能遗漏了一些明显的东西,但是我很感谢任何建议。