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

Loading......

在完成了作者与粉丝之间的关注与取关之后,下面实现作者获取粉丝信息;

实现思路:

  • 获取参数
    • 获取作者的用户名
  • 校验
    • 验证作者信息是否存在
    • 根据作者信息获取所有粉丝信息
  • 验证是否关注
    • 验证当前登录账户是否关注粉丝(在数据库中的作者粉丝表中查询)
  • 返回信息
    • 基本信息
    • 关注状态
    • 粉丝信息

代码实现:

详细代码:

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 {
    //获取作者信息
    const username = req.params.username;
    //验证作者是否存在
    const userA = await User.findOne({ 
      where: { username } ,
      include:['followers']
    });
    if (!userA) {
      throw new HttpException(404, "被关注用户不存在!!!", "user is not!!! ");
    }
    //验证当前登录是否关注作者
    const {email} = req.user
    let following = false
    let followers =[]
    for (const user of userA.followers) {
      if (email===user.dataValues.email) {
        following = true
      }
      delete user.dataValues.password //删除粉丝信息的密码
      delete user.dataValues.Followers 
      followers.push(user.dataValues)
    }
    //返回粉丝信息
    const profile = {
      username:userA.username,
      bio:userA.bio,
      avatar:userA.avatar,
      following,
      followers,
    }
    res.status(200)
        .json({
          status:1,
          message:'获取粉丝信息成功!!!',
          data:profile
        })
  } catch (err) {
    next(err);
  }
};

这样以来我们作者与粉丝之间的关系基本上就已完成.

未完待续......

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值