这个博客的思路不是很复杂,其中有登录、注册、jwt鉴权、发布动态、删除动态以及评论动态、删除评论动态等功能。东西不是很多,但也是一个完整restful API项目。后续需要加内容的话,可以自行补充
接下来我们开始写关于动态的评论
首先建comment评论表
- content 表示评论的内容
- user_id表示的是那个用户评论的
- moment_id表示评论的那个动态
- comment_id表示那个评论下的子评论
完成建表后开始在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();
然后在services目录下创建commentService.js逻辑处理
const db = require('../app/database')
class CommentService {
// 新增评论
async create(comment) {
try {
const sql = `INSERT INTO comment (content,user_id,moment_id, create_time) VALUES (?,?,?,?)`
const create_time = new Date()
const values = [comment.content, comment.user_id,comment.moment_id,create_time]
const result = await db.execute(sql, values)
return result
} catch (error) {
return error
}
}
// 回复评论
async reply(comment) {
try {
const sql = `INSERT INTO comment (content,user_id,moment_id, comment_id, create_time) VALUES (?,?,?,?,?)`
const create_time = new Date()
const values = [comment.content, comment.user_id,comment.moment_id,comment.comment_id,create_time]
const result = await db.execute(sql, values)
return result
} catch (error) {
return error
}
}
// 删除评论
async delete(comment_id, user_id) {
try {
// 先判断是否有权限删除
const strsql = `SELECT user_id FROM comment WHERE id = ?`
const data = await db.query(strsql, [comment_id])
if (data[0][0].user_id !== user_id) {
return {
code: 403,
msg: '没有权限删除'
}
}
// 删除评论
const sql = `DELETE FROM comment WHERE id = ?`
const values = [comment_id]
const result = await db.execute(sql, values)
return result
} catch (error) {
return error
}
}
// 获取评论列表
async getCommentList(moment_id) {
try {
const sql = `SELECT id, content, user_id, create_time, comment_id, (SELECT COUNT(*) FROM comment WHERE comment_id = c.id) AS reply_count FROM comment c WHERE moment_id = ?`
const data = await db.query(sql, [moment_id])
return data[0]
} catch (error) {
return error
}
}
}
module.exports = new CommentService();
最后创建commentRouter.js路由
const Router = require('koa-router');
const commentRouter = new Router({ prefix: '/comment' });
const {
create,
reply,
deleteComment,
getCommentList,
} = require('../controller/commentController');
const {
verifyToken
} = require('../middleware/userMiddleware')
commentRouter.post('/create', verifyToken, create);
commentRouter.post('/:comment_id/reply', verifyToken, reply);
commentRouter.get('/delete/:comment_id', verifyToken, deleteComment);
commentRouter.get('/get/:id', getCommentList);
module.exports = commentRouter;
部署
1】代码传到服务器上
把代码上传到服务器:FTP、git、rz 。
安装依赖:npm i
尝试启动服务:node app.js
curl服务器本地访问:curl http://127.0.0.1:3000/api
2】安装并使用pm2
npm install -g pm2
用pm2启动node服务:(需要在app.js目录下启动)
pm2 start app.js -i max -n [program_name]
博客end。仅供学习参考,如有不对请指正,谢谢