从0开始用node.js koa创建博客评论管理篇和部署

219 阅读2分钟

这个博客的思路不是很复杂,其中有登录、注册、jwt鉴权、发布动态、删除动态以及评论动态、删除评论动态等功能。东西不是很多,但也是一个完整restful API项目。后续需要加内容的话,可以自行补充

接下来我们开始写关于动态的评论

首先建comment评论表

image.png

  • 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。仅供学习参考,如有不对请指正,谢谢