学习使用Lin-CMS-Koa框架
选择该框架原因
- 有完善的基础功能实现,如
- 参数校验 LinValidator
- 权限控制 单权限点的控制以及组的权限控制
- 引入sequelize 实现各种数据库操作
- 路由封装 LinRouter
- jwt封装
- logger日志封装
- 有大厂的实战应用背书 ———— 具体哪家就不方便说了
环境准备
node —— v8.14.0 以上,推荐使用nvm 安装,方便后续版本切换
MySql —— v5.6 以上,安装教程
Navicat —— 连接本地 mysql
后端开发准备
数据库初始化
然后执行数据库初始化脚本)
生成Lin-cms核心数据表
设计表结构(举简单例子)
执行脚本:链接: pan.baidu.com/s/124EeX5ac… 提取码: h9d5
框架目录解析
关键目录:
-
接口层 :api文件夹中编写,利用
LinRouter新建接口路由 -
数据库操作层:dao文件夹中编写,利用Sequelize 的 查询功能)与
model层定义的数据模型,定义该模型可能存在的对数据库的任意操作 -
数据模型层:model文件夹中编写,首先数据模型需要继承自
Sequelize的Model,然后利用Sequelize定义表中各列的数据类型,最后创建新的Sequelize实例 实现对数据库的关联
其余目录定义可看官方文档,非常详细 项目结构及开发规范 | Lin CMS (talelin.com)
项目启动开发
数据库连接配置
在config/secure.js文件中进行数据库的配置
框架内容解析
LinValidator 参数校验器
定义
在 validator 文件夹中,新增与 api接口文件同名的文件 content.js
定义一个继承自 LinValidator的校验器,他提供了很多的检验方法,在构造函数中定义对各个参数的校验规则, Rule类型可在validator.js的官方文档中查看
继承
校验器规则也是可以继承的,可复用大部分规则,常用于新建与更新校验器
调用
直接在接口中引用即可
数据库操作
koa 本身并非对数据库做出支持,Lin 通过集成sequelize这个 orm 库来进行数据访问
在model层定义数据模型
- 利用
sequelize实现数据库与对象数据的关系映射 ../lib/db是用于连接数据库的一个新的sequelize实例- 数据模型要继承自
Model InfoCrudMixin是框架中封装的用于记录数据库操作的各种时间的如创建时间、更新时间、删除时间等
在数据模型中利用sequelize的各种配置来进行定制,还有就是一张表对应一个数据模型
在dao层定义对数据库单表的操作
引入 model 后直接实现增删改查 ——》
简单范例
在service层实现多表数据处理
在后续开发复杂的业务逻辑过程中,若我们存在需要在后端实现对多个数据库操作的结果进行汇总与集中处理时,我们可新建一个与 dao文件夹同级的service文件夹来定义服务层文件
在服务层文件中,可直接调用多个dao层的数据操作,然后在api层直接调用service即可,但要注意的是,需要直接调用的 dao 层中的函数,必须加上 static 修饰符
常用于多表数据的聚合接口如列表查询
权限控制
关键步骤:
- 在
Api层,把之前使用的koaRouter的get post替换成LinCms提供的LinGet 或 LinPost函数 Api实例参数调整-
`module` 权限所属的模块,方便后续给权限分组 -
`mountPermission` 是否允许权限进行分配,通常用户权限 和 管理员权限是不允许分配的
-
Api接口参数调整Api实例.permission('权限名')用于执行权限判断(中间件的形式)groupPermission、AdminPermission、LoginPermission用于权限级别的判断,是否属于权限组,是否管理员,是否登录,详见 模型管理和权限管理 | Lin CMS (talelin.com)
行为日志
写入自己库
可使用 linCms框架封装的logger
(中间件)
写入第三方库用于数据分析
同样在回调函数前已中间件方式执行或者在回调函数中将结果记录到日志中均可