社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

react+egg+mysql 写一个评论组件(三)

LJ在掘金92468 • 3 年前 • 368 次点击  
阅读 30

react+egg+mysql 写一个评论组件(三)

theme: mk-cute
复制代码

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

前言

前面2节主要介绍前端组件,本次将介绍一下评论组件的后端

前文推荐:react+egg+mysql 写一个评论组件(一)

后端主要采用的egg 数据库插件用的 egg-mysql

后台

数据库配置

Npm install egg-mysql

在config.default.js 里面配置数据库信息

config.mysql = { 
 // database configuration
 client: { 
 // host
 host: 'localhost', 
 // port
 port: '3306', 
 // username
 user: 'root', //数据库用户名
 // password
 password: '123456',  //数据库密码
 // database
 database: 'react_blog',    // 数据库库表名
 charset:'utf8mb4'   //字符集一定要写,否则表情包存储不了 
 }, 
 // load into app, default is open
 app: true, 
 // load into agent, default is close
 agent: false, 
 }; 
复制代码

接口设计

接着在控制层编写接口

const Controller = require('egg').Controller; 
复制代码

后端主要有几个接口

  • 根据文章id获取文章内的所有评论信息
  • 新增一条评论信息

根据id 获取评论信息

文章评论表C表与评论回复P表是2个不同的表

1 首先根据id查询评论表中所有的文章评论内容

2 根据查询出来的评论信息 去匹配 评论回复表中所有的评论信息

3 将查询出来的结果返回给前端

1.查询的评论表 中 还需要查询用户的信息 (用户的昵称 与联系方式)所以需要 2个表联查

       let id = this.ctx.params.id
 let comment = 'SELECT comment.comment_id as comment_id,'+ 
 'comment.article_id as article_id,'+ 
 'comment.content as content,'+ 
 'comment.user_id as userid,'+ 
 'comment.state as state,'+ 
 'comment.likes as likes,'+ 
 'comment.replys as replys,'+ 
 "FROM_UNIXTIME(comment.createtime,'%Y-%m-%d %H:%i:%s' ) as createtime,"+ 
 'user.user_id as user_id,'+ 
 'user.name as name,'+ 
 'user.contact as contact,'+ 
 'user.img_url as img_url '+ 
 'FROM comment LEFT JOIN user on comment.user_id = user.user_id '+ 
 'WHERE comment.article_id='+id
 
 const commentData = await this.app.mysql.query(comment) 
复制代码

2.评论回复表中由于有 评论人id 与被评论人的id 返回给前端的时候 需把评论人的昵称与被评论人的昵称都要返回给前端 所以要对用户表 查2次信息 ,利用写别名的方式查询2次(这里卡了好久 还好问了写后端的同事~哈哈哈哈啊 哈哈哈)

       let replay = 'SELECT reply.comment_id as comment_id,'+ 
 'reply.user_id as user_id,'+ 
 'reply.reply_id as reply_id,'+ 
 'reply.content as content,'+ 
 'reply.likes as likes,'+ 
 'reply.id as id,'+ 
 'reply.article_id as article_id,'+ 
 'reply.state as state,'+ 
 "FROM_UNIXTIME(reply.createtime,'%Y-%m-%d %H:%i:%s' ) as createtime,"+ 
 'u1.user_id as user_id,'+ 
 'u1.name as name,'+ 
 'u1.contact as contact,'+ 
 'u1.img_url as img_url,'+ 
 'u2.user_id as reply_id,'+ 
 'u2.name as Rname,'+ 
 'u2.contact as Rcontact,'+ 
 'u2.img_url as Rimg_url '+ 
 'FROM reply LEFT JOIN user u1 on reply.user_id = u1.user_id LEFT JOIN user u2 on reply.reply_id = u2.user_id '+ 
 'WHERE reply.article_id='+id
 const replayData = await this.app.mysql.query(replay) 
复制代码

3.遍历获取到的文章评论,将评论的所有信息 都放在replays 字段下面 方便前端解析

     const replayData = await this.app.mysql.query(replay) 
 // 根据文章的ID 获取所有的评论 跟用户信息 
 // 根据 评论里面的信息 获取 回复的信息
 let resluts = [] 
 commentData.map(a=>{ 
 let result = [] 
 replayData.map(b=>{ 
 if(a.comment_id == b.comment_id){ 
 result.push(b) 
 } 
 }) 
 a.replys = result
 }) 
 resluts = commentData
 this.ctx.body={ 
 data:resluts   //返回给前端
 } 
复制代码

存在的问题

写着 发现一个问题 就是 我需要拿出 回复评论表的所有信息 然后在去匹配 。数据量大会造成资源的消耗。

等待更新.......

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/118875
 
368 次点击