react 项目--博客系统 ( 25 )

Loading......

上篇博客,在完成了文章的相关操作后,下一步来完成评论控制器的操作;

评论控制器分为三步操作:

添加文章评论、获取文章评论列表、删除文章评论;

思路:

添加文章评论:

  • 获取参数 slug 及 评论内容
  • 获取文章及校验
  • 获取评论用户及校验
  • 创建评论
  • 创建关系
  • 优化返回信息
  • 响应数据

获取文章评论:

  • 获取参数 slug 
  • 获取文章及校验
  • 获取文章评论列表
  • 响应数据

删除文章评论:

  • 获取参数 slug ; id
  • 获取文章及校验
  • 获取评论及校验
  • 业务验证
  • 删除评论
  • 响应数据

具体实现:(详细代码在文章底部附有)

在控制器文件 controller 及路由文件 routes 中分别创建 comments.js ;

      

 并在初始化路由中添加;

验证:

在终端启动服务后;利用 postman 软件进行相应的验证;

创建文章评论:

          

 获取文章评论:

 删除文章评论:

             

 

 

详细代码:

controller / comments.js

const HttpException = require("../exceptions/http_expetion");
const Article = require("../models/article");
const User = require("../models/user");
const Comment = require("../models/comment");



//添加评论
module.exports.addComment = async (req, res, next) => {
  try {
    //获取参数 slug 及 评论内容
    const { slug } = req.params
    const { body } = req.body.comment
    //获取文章及校验
    const article = await Article.findByPk(slug)
    if (!article) {
      throw new HttpException(404, '获取文章不存在!!!', 'article is not found!!!')
    }
    //获取评论用户及校验
    const user = await User.findByPk(req.user.email)
    if (!user) {
      throw new HttpException(404, '评论用户不存在!!!', 'user is not found!!!')
    }
    //创建评论
    let newComment = await Comment.create({ body })
    //创建关系
    await user.addComments(newComment)//用户和评论的关系
    await article.addComments(newComment)//文章和评论的关系
    //优化返回信息
    newComment.dataValues.user = {
      username: user.dataValues.username,
      bio: user.dataValues.bio,
      avatar: user.dataValues.avatar
    }
    //响应数据
    res.status(200)
      .json({
        status: 1,
        message: '添加评论成功',
        data: newComment
      })
  } catch (err) {
    next(err);
  }
};


//获取评论
module.exports.getComments = async (req, res, next) => {
  try {
    //获取参数 slug 
    const { slug } = req.params
    //获取文章及校验
    const article = await Article.findByPk(slug)
    if (!article) {
      throw new HttpException(404, '获取文章不存在!!!', 'article is not found!!!')
    }
    //获取文章评论列表
    const comment = await Comment.findAll({
      where: {
        articleSlug: slug
      },
      include: [{
        model: User,
        attributes: ['username', 'bio', 'avatar']
      }]
    })
    //响应数据
    res.status(200)
      .json({
        status: 1,
        message: '获取评论列表成功',
        data: comment
      })

  } catch (err) {
    next(err);
  }
};


//删除评论
module.exports.deleteComment = async (req, res, next) => {
  try {
    //获取参数 slug ; id
    const { slug, id } = req.params
    //获取文章及校验
    const article = await Article.findByPk(slug)
    if (!article) {
      throw new HttpException(404, '获取文章不存在!!!', 'article is not found!!!')
    }
    //获取评论及校验
    const comment = await Comment.findByPk(id)
    if (!comment) {
      throw new HttpException(404, '获取评论不存在!!!', 'comment is not found!!!')
    }
    //业务验证
    if (req.user.email !== comment.userEmail) {
      throw new HttpException(403, '当前用户没有删除评论权限!!!', 'The current user does not have permission to delete comments!!!')
    }
    //删除评论
    await Comment.destroy({ where: { id } })
    //响应数据
    res.status(200)
      .json({
        status: 1,
        message: '删除评论成功'
      })

  } catch (err) {
    next(err);
  }
};

routes  / comments.js

const express = require("express");
const router = express.Router()
const {authMiddleware} = require('../middleware/admin/auth_middleware')

const CommentController = require('../controller/comments')


router.post('/:slug/comment',authMiddleware,CommentController.addComment) //添加评论
router.get('/:slug/comments',authMiddleware,CommentController.getComments) //获取评论
router.delete('/:slug/:id/comment',authMiddleware,CommentController.deleteComment) //删除评论

module.exports = router

initRoute.js

const userRoute = require('../routes/users')
const followRoute = require('../routes/follow')
const tagRoute = require('../routes/tags')
const articleRoute = require('../routes/articles')
const favoriteRoute = require('../routes/favorites')
const commentRoute = require('../routes/comments')

const initRoute = (app)=>{
    app.use('/api/v1/users',userRoute)
    app.use('/api/v1/follow',followRoute)
    app.use('/api/v1/tags',tagRoute)
    app.use('/api/v1/articles',articleRoute)
    app.use('/api/v1/favorite',favoriteRoute)
    app.use('/api/v1/comment',commentRoute)
}

module.exports = initRoute

未完待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值