前面的登录注册以及jwt鉴权已完成,现在开始步入正文。 1、首先建momment动态数据表。
2、成功建表后在Controller目录下创建CommentController.js控制器
const services = require('../services/commentService')
class CommentController {
// 创建评论
async create(ctx,next){
// 获取评论内容
const comment = ctx.request.body;
// 获取用户id
const { id } = ctx.user;
comment.user_id = id;
// 调用service层创建评论
const result = await services.create(comment);
// 返回结果
ctx.body = result;
}
// 回复评论
async reply(ctx,next){
// 获取评论内容
const comment = ctx.request.body;
// 获取用户id
const { id } = ctx.user;
comment.user_id = id;
// 获取comment_id
const { comment_id } = ctx.params;
comment.comment_id = comment_id;
// 调用service层创建评论
const result = await services.reply(comment);
// 返回结果
ctx.body = result;
}
// 删除评论
async deleteComment(ctx,next){
// 获取评论id
const { comment_id } = ctx.params;
// 获取用户id
const { id } = ctx.user;
// 调用service层删除评论
const result = await services.delete(comment_id,id);
// 返回结果
ctx.body = result;
}
// 获取评论列表
async getCommentList(ctx,next){
// 获取评论id
const { id } = ctx.params;
// 调用service层获取评论列表
const result = await services.getCommentList(id);
// 返回结果
ctx.body = result;
}
}
module.exports = new CommentController();
3、在services目录下的momentService.js写动态逻辑处理层
const pool = require('../app/database') // 引入数据库连接池
const { getDate } = require('../utils/utils') // 引入时间工具函数
// 定义公共变量sql语句
let strsql = `
SELECT
m.id id, m.content content, m.create_time create_time,json_object('id', u.id,'username', u.username) users
FROM moment as m
LEFT JOIN users as u ON m.user_id = u.id
`
// 定义MomentService类
class MomentService {
// 创建动态
async create(userId, content){
const sql = `INSERT INTO moment (content,user_id, create_time) VALUES (?,?,?)`;
const result = await pool.execute(sql, [content,userId, getDate()]);
return result;
}
// 获取单个动态
async getMomentById(id) {
try {
const sql = `${strsql} WHERE m.id = ?`;
const result = await pool.execute(sql, [id]);
return result[0];
} catch (error) {
return {
code: 500,
msg: '获取动态失败'
}
}
}
// 获取动态列表
async getMomentList(page, pageSize) {
const sql = `${strsql} LIMIT ?,?`
const [result] = await pool.execute(sql, [page, pageSize]);
return result;
}
// 删除和更新相同代码逻辑
async checkMoment(id, userId) {
// 先判断是否是自己的动态
const sqlstr = `SELECT user_id FROM moment WHERE id = ?`;
const [res] = await pool.execute(sqlstr, [id]);
if (res.length === 0) {
return {
code: 404,
msg: '动态不存在'
}
}
// 判断是否有权限删除
if (res[0].user_id!== userId) {
return {
code: 403,
msg: '没有权限删除'
}
}
// 权限验证通过,可以删除
return {
code: 200,
msg: 'ok'
}
}
// 删除动态
async deleteMoment(id, userId) {
// 先判断是否有权限删除
const checkResult = await this.checkMoment(id, userId);
if (checkResult.code !== 200) {
return checkResult;
}
// 执行删除操作
const sql = `DELETE FROM moment WHERE id = ?`;
const result = await pool.execute(sql, [id]);
return result;
}
}
module.exports =new MomentService();
4、在router目录下的创建momentRouter.js路由
const Router = require('koa-router');
const momentRouter = new Router({ prefix: '/moment' });
const {
createMoment,
getMoment,
getMomentList,
deleteMoment
} = require('../controller/momentController');
const {
verifyToken
} = require('../middleware/userMiddleware')
momentRouter.post('/create', verifyToken, createMoment);
momentRouter.get('/:id', getMoment);
momentRouter.get('/', getMomentList);
momentRouter.get('/del/:id',verifyToken, deleteMoment);
module.exports = momentRouter;
5.end内容管理篇的增删查已完成。