Я все еще новичок в мангусте в целом.Я создаю свое приложение для блогов, которое имеет бэкэнд на основе Node и MongoDB, я использую Angular для внешнего интерфейса.
Я создаю свой Restful API, который должен позволять пользователю нажимать на сообщение и обновлять его.Однако я точно не знаю, правильно ли я делаю это здесь.
Это схема для моего поста:
const mongoose = require('mongoose');
// Schema Is ONly bluePrint
var postSchema = mongoose.Schema({
title: {type: String, required: true },
content: {type: String, required: true},
}, {timestamps: true});
module.exports = mongoose.model("Post", postSchema);
В моем угловом сервисе у меня есть этофункция, чтобы помочь мне отправить запрос http на мой бэкэнд-сервер, идентификатор для этой функции берется из бэкэнда mongoDB, заголовок и содержимое из формы на странице
updatePost(id: string, title: string, content: string) {
console.log('start posts.service->updatePost()');
const post: Post = {
id: id,
title: title,
content: content
};
this._http.put(`http://localhost:3000/api/posts/${id}`, post)
.subscribe(res => console.log(res));
}
Мне кажется, что естьпо крайней мере пару способов приблизиться к этому для создания моего API
Метод 1 (работает, но очень сомневаюсь, что это хорошая практика): здесь я передаю идентификатор, полученный из mongoDB, обратно на сервер через мой файл service.tsчтобы избежать ошибки «изменение неизменяемого поля _id»
app.put("/api/posts/:id", (req,res)=>{
console.log('update api called:', req.params.id);
const post = new Post({
id: req.body.id,
title: req.body.title,
content: req.body.content
});
Post.updateOne({_id: req.params.id}, post).then( result=> {
console.log(result);
res.json({message:"Update successful!"});
});
});
Метод 2 Я считаю, что это более надежно, чем метод 1, но все же я не считаю его хорошей практикой:
app.put("/api/posts/:id", (req, res)=> {
Post.findOne(
{_id:req.params.id},(err,post)=>{
if(err){
console.log('Post Not found!');
res.json({message:"Error",error:err});
}else{
console.log('Found post:',post);
post.title=req.body.title;
post.content=req.body.content;
post.save((err,p)=>{
if(err){
console.log('Save from update failed!');
res.json({message:"Error",error:err});
}else{
res.json({message:"update success",data:p});
}
})
}
}
);
});
Я открыт для любых мнений в надежде, что смогу чему-то научиться у гуру Mongoose и Restful:)