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