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
未完待续......