全栈项目|小书架|服务器端-NodeJS+Koa2 实现评论功能
评论功能分析

上图可以看出评论功能主要实现了:评论的发布、评论列表的展示。
在不考虑子评论以及图片评论的场景下,评论功能主要有以下两个接口:
- 发布评论
- 获取评论列表(考虑分页)
评论 Model 的建立
结合上图通过分析可以看出一条评论信息主要包含有:
- 用户
id - 用户名
- 用户头像
- 评论信息
- 书籍
id - 书籍名称(可选)
那么根据以上的分析,我们的Model设计如下:
Comment.init({
cmid: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
uid: {
type: Sequelize.STRING,
},
uname: Sequelize.STRING,
ucontent: Sequelize.STRING,
bkname: Sequelize.STRING,
bkid: Sequelize.INTEGER,
uavatar: {
type: Sequelize.STRING,
}
}, {
sequelize,
tableName: 'comment'
})
通过Model生成的comment表格最终如下:

发布评论
创建了
Model之后下一步就是将评论数据提交到服务器,而评论的提交需要用户已经登录,如果未登录是不能发表评论的。这里使用的校验还是之前提到的Auth中间件,通过该中间件去校验用户是否登录。
发布评论的路由如下:
router.post('/write', new Auth().m, async ctx => {
const v = await new BookIdValidator().validate(ctx)
const comment = new Comment()
ctx.body = await comment.addBookComment(v.get('body.commentInfo'))
})
而addBookComment方法的处理就是将用户上传的表单中的数据保存到数据库。
async addBookComment(commentInfo) {
let mCommentInfo = JSON.parse(commentInfo)
try {
let comment = await Comment.create({
uid: mCommentInfo.userid,
uname: mCommentInfo.username,
ucontent: mCommentInfo.conment,
bkname: mCommentInfo.bookname,
bkid: mCommentInfo.bookid,
uavatar: mCommentInfo.avatar
})
console.log(comment)
if (!comment){
throw new global.errs.NotFound('创建评论失败',-1)
}
return comment
} catch (err) {
// print the error details
console.log(err);
}
}
评论列表
当发布评论之后需要用户返回书籍详情页面展示已发布的评论信息。
获取评论列表的路由如下:
router.get('/', new Auth().m, async ctx => {
const v = await new BkIdValidator().validate(ctx)
const comment = new Comment()
ctx.body = await comment.geCommentByBookId(v.get('query.bkid'))
})
这里的评论列表接口也是使用了Auth中间件去检验用户是否登录。通过上面伪代码可以是通过书籍id去查询书籍的评论列表,那么geCommentByBookId的代码如下:
async geCommentByBookId(bkid) {
const comments =await Comment.findAll({
where: {
bkid
}
})
if (comments.length <= 0) {
throw new global.errs.NotFound("还没有评论信息哟~", NotFound.COMMENT_EMPTY)
}
return comments
}
这里的通过书籍id查询数据库中所有的评论信息,如果有评论信息则返回评论数据,没有评论数据则返回错误的提示信息。
ps: 暂不实现分页功能,分页功能在介绍搜索功能时会介绍。
以上就是本次的介绍。
扫码关注公众号,轻撩即可。
全栈项目|小书架|服务器端-NodeJS+Koa2 实现评论功能的更多相关文章
- 全栈项目|小书架|服务器端-NodeJS+Koa2 实现点赞功能
效果图 接口分析 通过上面的效果图可以看出,点赞入口主要是在书籍的详情页面. 而书籍详情页面,有以下几个功能是和点赞有关的: 获取点赞状态 点赞 取消点赞 所以项目中理论上与点赞相关的接口就以上三个. ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2 实现搜索功能
搜索功能会包含:热搜.搜索列表. 热搜功能在电商的搜索中经常看到,热搜数据的来源有两种 用户真实的搜索数据,根据算法进行排序 人为推送的数据 想想微博热搜是可以买的就知道热搜功能多么重要了. 我采用第 ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2 实现书籍详情接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 书籍详情分析 书籍详情页面如下: 从上图可以分析出详情页面大概有以下 ...
- 全栈项目|小书架|服务器开发-Koa2 全局异常处理
什么是异常 做开发的基本都知道异常,像Android开发中常见的ANR异常.空指针异常,服务器开发中经常遇到的异常404,500异常,还有一些其他常见的异常,具体可见HTTP状态码. 基本上这些异常可 ...
- 全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下
KOA2 是什么? Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 asyn ...
- 全栈项目|小书架|服务器开发-Koa2 连接MySQL数据库(Navicat+XAMPP)
为什么使用数据库 为什么需要数据库?-知乎 相比与文件系统,数据库具有以下优势: 高效率:查找效率高 高可用:可数据库共享 安全性强:数据不能随意修改 选择哪个数据库 数据库可以分为关系型数据库和非关 ...
- 全栈项目|小书架|服务器开发-Koa2 参数校验处理
为什么需要做参数校验 在开发中,无论是App开发还是服务器接口开发, 我们无法去预测用户传入的数据,因此参数(数据)校验是开发中不可或缺的一环. 例如像App的注册登录表单提交页面,就要做好多层的判断 ...
- 全栈项目|小书架|服务器开发-NodeJS 使用 JWT 实现登录认证
通过这篇 全栈项目|小书架|服务器开发-JWT 详解 文章我们对JWT有了深入的了解,那么接下来介绍JWT如何在项目中使用. 安装 $ npm install jsonwebtoken 生成 Toke ...
随机推荐
- 关于windows10用c++部署libtorch过程中遇到的一些问题
libtorch1.0 vs2017 CMake3.14 windows10 无cuda 用c++调用pytorch模型官网上面有详细教程,也有很多博客,可以参考以下链接:https://blog.c ...
- 冰多多团队-第八次Scrum例会
冰多多团队-第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj debug, IAT debug, IAT 牛雅哲 将语音部分迁移到IatDemo上,去将科大讯飞的语音听写dem ...
- ASP.NET Core中的运行状况检查
由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...
- CefSharp中文帮助文档
https://github.com/cefsharp/CefSharp/wiki/CefSharp%E4%B8%AD%E6%96%87%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A ...
- 【转载】 TensorFlow tf.app&tf.app.flags用法介绍
作 者:marsggbo 出 处:https://www.cnblogs.com/marsggbo版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本. ---------- ...
- Mysql 执行效率 性能综合贴
一.or 的性能不如 in [参考]mysql in与or效率比较 二.MySQL数据库开发的三十六条军规 [参考]https://blog.csdn.net/aa_moon/article/deta ...
- [windows bat]如何启动一个新的cmd窗口并在其内执行命令
两种方式: start cmd /k echo Hello, World! # # 执行完毕以后,新开的窗口不会自动关闭 start cmd /C pause # 执行完毕以后,新开的窗口会自动关闭 ...
- C++11 并发编程库
C++11 并发编程 C++11 新标准中引入了几个头文件来支持多线程编程,他们分别是: <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_f ...
- 分布式ID生成总结
1.数据库自增id 新建一个公共库,库里面新建一个序列表,主键id自增,每次请求增加数据都往这个表中插入数据,然后获取到id,然后使用即可. 优点:方便简单 缺点:单库生成自增id,高并发下,会有瓶颈 ...
- git clone 某个链接时候报错Initialized empty Git repository in 不能克隆
查看下是不是git是不是1.7.1版本. git --version 使用 yum -y update 更新一下. 再使用git clone 虽然还是会提示这个报错,但是可以克隆了.亲测有效. git ...