LinCms —— koa框架实战学习笔记

293 阅读4分钟

学习使用Lin-CMS-Koa框架

选择该框架原因

  1. 有完善的基础功能实现,如
    • 参数校验 LinValidator
    • 权限控制 单权限点的控制以及组的权限控制
    • 引入sequelize 实现各种数据库操作
    • 路由封装 LinRouter
    • jwt封装
    • logger日志封装
  2. 有大厂的实战应用背书 ———— 具体哪家就不方便说了

文档 doc.cms.talelin.com/

环境准备

node —— v8.14.0 以上,推荐使用nvm 安装,方便后续版本切换
MySql —— v5.6 以上,安装教程 Navicat —— 连接本地 mysql

后端开发准备

数据库初始化

image.png
然后执行数据库初始化脚本)
生成Lin-cms核心数据表 image.png

设计表结构(举简单例子)

image.png

执行脚本:链接: pan.baidu.com/s/124EeX5ac… 提取码: h9d5

框架目录解析

关键目录:

  • 接口层 :api文件夹中编写,利用 LinRouter 新建接口路由

  • 数据库操作层:dao文件夹中编写,利用Sequelize查询功能)与 model层定义的数据模型,定义该模型可能存在的对数据库的任意操作

  • 数据模型层:model文件夹中编写,首先数据模型需要继承自SequelizeModel,然后利用Sequelize定义表中各列的数据类型,最后创建新的 Sequelize实例 实现对数据库的关联

其余目录定义可看官方文档,非常详细 项目结构及开发规范 | Lin CMS (talelin.com)

项目启动开发

数据库连接配置

config/secure.js文件中进行数据库的配置

image.png

框架内容解析

LinValidator 参数校验器

定义

validator 文件夹中,新增与 api接口文件同名的文件 content.jsimage.png
定义一个继承自 LinValidator的校验器,他提供了很多的检验方法,在构造函数中定义对各个参数的校验规则, Rule类型可在validator.js的官方文档中查看

继承

校验器规则也是可以继承的,可复用大部分规则,常用于新建与更新校验器 image.png

调用

直接在接口中引用即可 image.png

数据库操作

koa 本身并非对数据库做出支持,Lin 通过集成sequelize这个 orm 库来进行数据访问

在model层定义数据模型

  • 利用 sequelize 实现数据库与对象数据的关系映射
  • ../lib/db是用于连接数据库的一个新的sequelize实例
  • 数据模型要继承自Model
  • InfoCrudMixin是框架中封装的用于记录数据库操作的各种时间的如创建时间、更新时间、删除时间等
  • image.png

    在数据模型中利用 sequelize的各种配置来进行定制,还有就是一张表对应一个数据模型 image.png

在dao层定义对数据库单表的操作

引入 model 后直接实现增删改查 ——》 简单范例

在service层实现多表数据处理

在后续开发复杂的业务逻辑过程中,若我们存在需要在后端实现对多个数据库操作的结果进行汇总与集中处理时,我们可新建一个与 dao文件夹同级的service文件夹来定义服务层文件

在服务层文件中,可直接调用多个dao层的数据操作,然后在api层直接调用service即可,但要注意的是,需要直接调用的 dao 层中的函数,必须加上 static 修饰符
常用于多表数据的聚合接口如列表查询

image.png

权限控制

关键步骤:

  1. Api 层,把之前使用的 koaRouterget post 替换成 LinCms提供的 LinGet 或 LinPost函数
  2. Api实例参数调整
    • `module` 权限所属的模块,方便后续给权限分组
      
    • `mountPermission` 是否允许权限进行分配,通常用户权限 和 管理员权限是不允许分配的
      
  3. Api接口参数调整
    • Api实例.permission('权限名') 用于执行权限判断(中间件的形式)
    • groupPermission、AdminPermission、LoginPermission 用于权限级别的判断,是否属于权限组,是否管理员,是否登录,详见 模型管理和权限管理 | Lin CMS (talelin.com) image.png

行为日志

写入自己库

可使用 linCms框架封装的logger (中间件)

image.png

写入第三方库用于数据分析

同样在回调函数前已中间件方式执行或者在回调函数中将结果记录到日志中均可

image.png