接上篇博客,在完成了文章的相关操作后,下一步来完成喜欢控制器的操作;
喜欢控制器:读者觉得这篇文章很好,可以点击喜欢按钮,添加喜欢;
添加喜欢思路:
- 获取参数:文章标识符
- 获取文章
- 文章添加喜欢用户
- 获取文章作者
- 获取喜欢个数
- 数据处理
- 响应数据
取消喜欢思路:
- 获取参数:文章标识符
- 获取文章
- 文章取消喜欢用户
- 获取文章作者
- 获取喜欢个数
- 数据处理
- 响应数据
实现: (详细代码再文章尾部)
首先在控制器下创建文件 favorites.js 在文件中先创建一个方法 handleArticle() 用来进行统一的数据处理,在使用时调用即可;
同样喜欢控制器也需在路由中创建访问目录;
并在初始化路由中声明访问路径;
在完成这些后就可在 favorites.js 中进行喜欢文章及取消喜欢文章的编写了;
测验:
在终端启动服务后,在 postman 中测试添加及取消喜欢文章;
添加喜欢文章后再 数据库的 favorites 表中即可查看到对应数据;
详细代码:
controller / favorites.js :
const HttpException = require("../exceptions/http_expetion");
const Article = require("../models/article");
const Tag = require("../models/tag");
const User = require("../models/user");
function handleArticle(article,author,count){
const nweTags = []
for (const i of article.dataValues.tags) {
nweTags.push(i.name)
}
article.dataValues.tags = nweTags
delete author.dataValues.password
delete author.dataValues.email
article.dataValues.author = author
article.dataValues.favoriteCount = count
article.dataValues.favorited = true
return article.dataValues
}
//添加喜欢
module.exports.addFavorite = async (req, res, next) => {
try {
//获取参数:文章
const {slug} = req.params
//获取文章
let article =await Article.findByPk(slug,{include:Tag})
if(!article){
throw new HttpException(404,'获取喜欢文章不存在!!!','article is not found!!!')
}
//文章添加喜欢用户
await article.addUsers(req.user.email)
//获取文章作者
const author = await article.getUser()
//获取喜欢个数
const count = await article.countUsers()
//数据处理
article = handleArticle(article,author,count)
//响应数据
res.status(200)
.json({
status:1,
message:'添加喜欢文章成功',
data:article
})
} catch (err) {
next(err);
}
};
//取消喜欢
module.exports.removeFavorite = async (req, res, next) => {
try {
//获取参数:文章
const {slug} = req.params
//获取文章
let article =await Article.findByPk(slug,{include:Tag})
if(!article){
throw new HttpException(404,'获取喜欢文章不存在!!!','article is not found!!!')
}
//文章取消喜欢用户
await article.removeUsers(req.user.email)
//获取文章作者
const author = await article.getUser()
//获取喜欢个数
const count = await article.countUsers()
//数据处理
article = handleArticle(article,author,count)
//响应数据
res.status(200)
.json({
status:1,
message:'取消喜欢文章成功',
data:article
})
} catch (err) {
next(err);
}
};
routes / favorites.js :
const express = require("express");
const router = express.Router()
const {authMiddleware} = require('../middleware/admin/auth_middleware')
const FavoriteController = require('../controller/favorites')
router.post('/:slug',authMiddleware,FavoriteController.addFavorite)
router.delete('/:slug',authMiddleware,FavoriteController.removeFavorite)
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 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)
}
module.exports = initRoute
未完待续......