【发布时间】:2019-09-02 14:06:01
【问题描述】:
我正在尝试删除某个博客文章中的所有 cmets,该博客文章即将被 mongoose 删除。我真的不明白为什么我的代码不起作用。
const commentSchema = new mongoose.Schema({
message: { type: String, required: true },
likes: { type: Number, default: 0 },
parentBlog: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "Blog"
},
commenter: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "User"
}
});
router.delete("/:title_url", checkAuth, (req, res) => {
const successMessage = "Successfully deleted blog post.";
const errorMessage = "Error in deleting blog post.";
Blog.findOne({ title_url: req.params.title_url })
.then(foundBlog => {
Comment.deleteMany({
parentBlog: foundBlog._id
});
foundBlog.remove();
console.log(foundBlog);
return res.status(200).json({ message: successMessage });
})
.catch(res.status(500).json({ message: errorMessage }));
});
console.log 被正确记录,就在我收到以下错误之前:
(node:3108) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
编辑:这是我的最终工作解决方案。
// delete Blog Post route
router.delete("/:title_url", checkAuth, (req, res) => {
const successMessage = "Successfully deleted blog post.";
const errorMessage = "Error in deleting blog post.";
// delete Post
Blog.findOneAndRemove({ title_url: req.params.title_url })
.populate("comments")
.then(async foundBlog => {
// delete Comment references from Commenters
await foundBlog.comments.forEach(async comment => {
await User.findByIdAndUpdate(comment.commenter._id, {
$pull: { comments: comment._id }
});
});
// delete Post reference from Post Author
await User.findByIdAndUpdate(foundBlog.author, {
$pull: { blogs: foundBlog._id }
});
// delete all child Comments
await Comment.deleteMany({
parentBlog: foundBlog._id
});
return res.status(200).json({ message: successMessage });
})
.catch(() => res.status(500).json({ message: errorMessage }));
});
【问题讨论】:
-
我解决了。我忘了在 catch 块中执行一个函数。它应该说:catch(() => res.status(500).json({ message: errorMessage }))
标签: node.js angular mongodb express mongoose