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

Loading.....

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

喜欢控制器:读者觉得这篇文章很好,可以点击喜欢按钮,添加喜欢;

添加喜欢思路:

  • 获取参数:文章标识符
  • 获取文章
  • 文章添加喜欢用户
  • 获取文章作者
  • 获取喜欢个数
  • 数据处理
  • 响应数据

 取消喜欢思路:

  • 获取参数:文章标识符
  • 获取文章
  • 文章取消喜欢用户
  • 获取文章作者
  • 获取喜欢个数
  • 数据处理
  • 响应数据

实现:  (详细代码再文章尾部)

首先在控制器下创建文件 favorites.js 在文件中先创建一个方法 handleArticle() 用来进行统一的数据处理,在使用时调用即可;

react 项目--博客系统 ( 24 )_第1张图片

 同样喜欢控制器也需在路由中创建访问目录;

react 项目--博客系统 ( 24 )_第2张图片

 并在初始化路由中声明访问路径;

react 项目--博客系统 ( 24 )_第3张图片

 在完成这些后就可在 favorites.js 中进行喜欢文章及取消喜欢文章的编写了;

react 项目--博客系统 ( 24 )_第4张图片         react 项目--博客系统 ( 24 )_第5张图片

 

测验:

在终端启动服务后,在 postman 中测试添加及取消喜欢文章;

react 项目--博客系统 ( 24 )_第6张图片    react 项目--博客系统 ( 24 )_第7张图片

 添加喜欢文章后再 数据库的 favorites 表中即可查看到对应数据;

react 项目--博客系统 ( 24 )_第8张图片

 

详细代码:

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

未完待续......

你可能感兴趣的:(react--项目开发,javascript,react.js,前端)