总的来说,我还是猫鼬的新手。我正在构建具有基于Node和MongoDB后端的博客应用程序,我在前端使用Angular。
我正在创建我的Restful API,该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请求发送到后端服务器,此功能的ID来自后端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(有效,但高度怀疑这是否是一种好习惯): 在这里,我通过service.ts文件将从mongoDB检索到的ID传递回服务器,以避免“修改不可变字段_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});
}
})
}
}
);
});
我愿意接受所有人的意见,希望我可以从猫鼬大师和Restful中学到一些东西
答案 0 :(得分:1)
在这种情况下,简单地选择findOneAndUpdate()
的理由如下:
findOneAndUpdate()
来更新基于以下内容的文档:
筛选和排序条件。 update()
相比,我们更喜欢使用此功能,因为它有一个选项{new:
true}
,并借助它可以获取更新的数据。findOneAndUpdate()
。另一方面,update()
应该是
批量修改时使用。update()
总是返回修改后的文档,因此不会返回更新的文档,并且在诸如
您,我们总是会返回更新的文档数据,因此我们
应该在这里使用findOneAndUpdate()