Допустим, у меня есть API с конечной точкой / posts.Каждый пост в моей схеме Mongoose содержит ссылку на пользователя, который его создал, а каждый пользователь имеет массив ссылок на созданные им посты.
При публикации в качестве зарегистрированного пользователя, чтобы сохранить эту ссылку, мне нужно отправить текущий зарегистрированный идентификатор пользователя вместе с содержимым сообщения в конечную точку / 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'
}
});
Создать новое сообщение (нужен способ получить идентификатор пользователя, поскольку в действительности его не будет в 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);
}
}
Я знаю, что, возможно, упускаю что-то очевидное, но я ценю любые предложения.