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 //返回给前端
}
存在的问题
写着 发现一个问题 就是 我需要拿出 回复评论表的所有信息 然后在去匹配 。数据量大会造成资源的消耗。
等待更新.......
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!