react 项目--博客系统 (十八)

Loading......

之前我们完成了用户的注册、登录、获取及修改;接下来开始实现用户之间的关注与取消关注;

添加用户关注:

思路架构

  • 获取作者参数
  • 参数校验
    • 作者用户是否存在
  • 粉丝信息
    • 通过email 获取粉丝信息
  • 添加关注
    • 建立关系:被关注者主键和关注者主键存储到数据库中(表follwos)
  • 返回关注者信息

具体实现

controller 中创建 follow.js ;

routes 中创建 follow.js;

更新路由,在 init 下的 initRounte.js 中添加配置访问路径;

测试:

在终端启动服务器后用 postman 先创建两个用户命名为 zhangs 和 lis ;

创建成功后可在可视化工具 Navicat 中查看到数据库中的数据;

登录zhangs 的账户

将返回的 token 值复制到关注用户中 测试关注;

Navicat 数据库中的表 followers 中即可看到粉丝关注者与被关注者的关系已建立;

 

这样作者与粉丝之间的关注功能就已经实现,接下来实现取消关注功能;

取消关注:

 在完成了关注的功能后,取消关注更能与关注功能非常相似;

思路架构

  • 获取作者参数
  • 参数校验
    • 作者用户是否存在
  • 粉丝信息
    • 通过email 获取粉丝信息
  • 取消关注
    • 删除建立的关系:数据库中(表follwos)
  • 返回关注者信息

具体实现

controller 中 follow.js实现 ;

测试:

在终端启动后 ;在 postman 中测试;

 在 Navicat 数据库中的表 followers 中查看两者关系已删除,表示取消关注成功;

详细代码:

init / initRounte.js

const userRoute = require('../routes/users')
const followRoute = require('../routes/follow')

const initRoute = (app)=>{
    app.use('/api/v1/users',userRoute)
    app.use('/api/v1/follow',followRoute)
}

module.exports = initRoute

 routes / follow.js

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

const FollowController = require('../controller/follow')


router.post('/:username',authMiddleware,FollowController.follow)
router.delete('/:username',authMiddleware,FollowController.cancelFollow)
router.get('/:username',authMiddleware,FollowController.getFollowers)


module.exports = router

controller / follow.js 

const HttpException = require("../exceptions/http_expetion");
const User = require("../models/user");

//添加关注
module.exports.follow = async (req, res, next) => {
  try {
    //获取信息
    const username = req.params.username;
    //校验用户是否存在
    const userA = await User.findOne({ where: { username } });
    if (!userA) {
      throw new HttpException(404, "被关注用户不存在!!!", "user is not!!! ");
    }
    //关注者信息
    const { email } = req.user;
    //获取用户信息
    const userB = await User.findByPk(email);
    //添加关注;建立关系
    await userA.addFollowers(userB);
    //返回被关注者信息
    const profile = {
      username: userA.username,
      bio: userA.bio,
      avatar: userA.avatar,
      following: true,
    };
    res.status(200).json({
      status: 1,
      message: "关注成功!!!",
      data: profile,
    });
  } catch (err) {
    next(err);
  }
};

//取消关注
module.exports.cancelFollow = async (req, res, next) => {
  try {
    //获取信息
    const username = req.params.username;
    //校验用户是否存在
    const userA = await User.findOne({ where: { username } });
    if (!userA) {
      throw new HttpException(404, "被关注用户不存在!!!", "user is not!!! ");
    }
    //关注者信息
    const { email } = req.user;
    //获取用户信息
    const userB = await User.findByPk(email);
    //取消关注
    await userA.removeFollowers(userB);
    //返回被关注者信息
    const profile = {
      username: userA.username,
      bio: userA.bio,
      avatar: userA.avatar,
      following: false,
    };
    res.status(200).json({
      status: 1,
      message: "取消关注成功!!!",
      data: profile,
    });
  } catch (err) {
    next(err);
  }
};

//获取粉丝
module.exports.getFollowers = async (req, res, next) => {
  try {
  } catch (err) {
    next(err);
  }
};

未完待续......

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值