【发布时间】:2017-03-26 05:04:45
【问题描述】:
我查看了一堆其他 SO 帖子,并找到了不同的方法来做到这一点,所以我想知道哪个是最首选的。我正在教学生这个,所以我想给他们最佳实践。
如果我有以下BlogPost 对象(简体):
var BlogPostSchema = new mongoose.Schema({
body: String,
comments: [String]
});
我想为这个博客的 cmets 数组添加一条新评论,我可以想到至少 3 种主要方法来实现这一点:
1) 将评论推送到 Angular 中的博客对象,并向 /blogs/:blogID 端点提交 PUT 请求,使用包含的新评论更新整个博客对象。
2) 向/blogs/:blogID/comments 端点提交POST 请求,其中请求正文只是新评论,找到博客,将评论推送到vanilla js 中的数组,并保存:
BlogPost.findById(req.params.blogID, function(err, blogPost) {
blogPost.comments.push(req.body);
blogPost.save(function(err) {
if (err) return res.status(500).send(err);
res.send(blogPost);
});
});
或
3) 将 POST 提交到带有新评论请求正文的 /blogs/:blogID/comments 端点,然后使用 MongoDB 的 $push 或 $addToSet 将推荐添加到 cmets 数组中:
BlogPost.findByIdAndUpdate(
req.params.blogID,
{$push: {comments: req.body}},
{safe: true, new: true},
function(err, blogPost) {
if (err) return res.status(500).send(err);
res.send(blogPost);
});
});
我确实找到了this stackoverflow post,其中回答者谈到了选项 2 与选项 3,并且基本上说尽可能使用选项 2,这对我来说似乎更简单。 (而且我通常会尽量避免使用钩子和其他猫鼬好东西的方法。)
你怎么看?有什么建议吗?
【问题讨论】:
-
我会选择选项 3。2 和 3 基本相同。选项 3 执行 findAndUpdate 服务器端(导致 1 次调用返回更新文档的服务器)。在选项 2 中,您首先检索 blogPost,然后将更新发送到服务器(.save 操作),这是对服务器的 2 次调用。
标签: javascript angularjs mongodb mongoose mean