首页 > 解决方案 > 如何删除 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 })))
}); 

标签: node.jsmern

解决方案


好吧,我认为您正在创建一个名为 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');
  }
});

推荐阅读