node.js - 如何删除 Post 架构内的评论?
问题描述
我正在开发社交网络应用程序,用户可以在其中发布和评论。我正在尝试删除帖子中的评论。我与 MERN(猫鼬、快递、反应、nodejs)一起工作。我可以成功删除帖子,但不知道如何删除其评论。
这是我的 Mongo 连接:
const db = config.get('mongoURI') mongoose.connect(db,{useNewUrlParser: true,useUnifiedTopology: true})
.then(() => console.log('Connected to MongoDB.'))
.catch(err => console.log('Fail to connect.', err))
这是后模式
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const PostSchema = new Schema({
userID: {
type: Schema.Types.ObjectId,
ref: 'user'
},
content: {
type: String,
required: true
},
registration_date: {
type: Date,
default: Date.now
},
likes: [
{
type: Schema.Types.ObjectId,
ref: "user"
}
],
comments: [
{
text: String,
userID: {
type: Schema.Types.ObjectId,
ref: 'user'
}
}
]
})
module.exports = User = mongoose.model('posts', PostSchema)
这是我试图删除它的地方:
router.delete("/comment/:postId/:commentId", auth, function (req, res) {
Post.findByIdAndUpdate(
(req.params.postId),
{ $pull: { comments: req.params.commentId } },
{ new: true }
)
.then(post => console.log(post)
.then(() => {
res.json({ success_delete: true })
})
.catch(() => res.json({ success_delete: false })))
});
解决方案
好吧,我认为您正在创建一个名为 DevConnector 的应用程序。所以我过去为相同的代码编写了代码。
router.delete('/comment/:id/:comment_id', auth, async (req, res) => {
try {
const post = await Post.findById(req.params.id);
// Pull out comment
const comment = post.comments.find(
comment => comment.id === req.params.comment_id
);
// Make sure comment exists
if (!comment) {
return res.status(404).json({ msg: 'Comment does not exist' });
}
// Check user
if (comment.user.toString() !== req.user.id) {
return res.status(401).json({ msg: 'User not authorized' });
}
// Get remove index
const removeIndex = post.comments
.map(comment => comment.user.toString())
.indexOf(req.user.id);
post.comments.splice(removeIndex, 1);
await post.save();
res.json(post.comments);
} catch (err) {
console.error(err.message);
res.status(500).send('Server Error');
}
});
推荐阅读
- python - 从结构不均匀的字符串中提取日期
- apache - MAMP Apache 服务器 - 一个子目录有效,另一个无效
- electron - Electron-mksnapshot snapshotResult.setGlobals 位置?
- angular - Angular Material:选择列表示例不起作用
- c++ - 链表 push_front 和 push_back 中的 C++ 内存泄漏
- angular - TypeError:无法读取未定义的属性-但站点可以正常工作-Angular 7
- vbscript - 如何从 VBScript 最大化屏幕?
- c++ - OpenGL:对象选择
- azure - 有没有办法使用 Powershell 打印 azure 子网中的所有 IP 地址?
- r - 为什么 Autocad 不打印缩小的地理围栏 jpeg?