最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • react+egg+mysql 写一个评论组件(三)

    正文概述 掘金(LJ在掘金92468)   2021-08-22   567
    theme: mk-cute
    

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

    前言

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

    后端主要采用的egg 数据库插件用的 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 获取评论信息

    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   //返回给前端
     } 
    

    存在的问题

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

    等待更新.......


    起源地下载网 » react+egg+mysql 写一个评论组件(三)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元