lin-cms-koa 使用学习
- 下载lin-cms 到本地目录 ,使用vs coed 编辑器打开 项目结构如下:
2.如何新建一个新的接口
在app/api/v1下面新建接口文件test.js
import { LinRouter } from 'lin-mizar'; //引入lin 封装好的koa-router
import { TestValidator } from '../../validator/test'; //导入的验证层
const ContentApi = new LinRouter({
prefix: '/v1/Content' //安装的接口路径
});
ContentApi.post('/', async ctx => {
const v = await new TestValidator().validate(ctx);
return ctx.json(v.get('body')); //返回给客户端的信息
});
module.exports = { ContentApi }; //暴露接口
3.新建了接口 ,我们有必要对传递过来的数据进行校验 ,校验通过 返回正确的信息 ,校验时报返回给前端错误提示! 那么 如何新建一个验证层呢?
在app/validator下面新建一个同名的js文件 (为什么要同名呢 ? 主要是保证项目结构清晰!让别人易看懂)
创建test.js //创建一个类 继承validator 这个基类 ,(继承前别忘了引入lin封装好的validator这个类库哦)
import { LinValidator, Rule } from 'lin-mizar';
// 继承 lin的 验证基类
class Test extends LinValidator {
constructor () {
super(); //初始化父类
this.q = [new Rule('isNotEmpty', '搜索关键字不能为空'),
new Rule('isInt', '搜索关键字必须是数字')];
this.name = new Rule('isNotEmpty', '名称不能为空');
}
}
export { Test as TestValidator};
//关于使用validator 验证器的时候 需要查看validator的使用介绍哦!
4.现在 我们应该创建一个model 实体层了 ,model 层映射了数据库的实体类
在app/model下面新建 test.js
//继承了squelize的model 基类
// squelize 实例 在 、app/lib/db 目录下面
//squelize 主要对于 数据库操作 ,lin 集成了squelize 使用需要查看官方文档
import {Model,Squelize} from 'squelize'
import { merge} from 'lodash' //合并对象 属性 查看lodash.js
import { sequelize } from '../lib/db';
import { InfoCrudMixin } from 'lin-mizar';
class Test extends Model{
}
Test.init({
id:{
type: Sequelize.INTGER(40), //标明这个字段的类型 和长度
allowNull: fasle //是否可为空
}
},merge(
{
sequelize, //链接到指定的数据库哦!
tableName:'test', //表名
modelName:'test' // model名
},
InfoCrudMixin.options //合并创建时间、 删除时间,更新时间
))
export {Test as TestModel} //导出模型
5.实体类有了 ,我们下一步 需要创建一个dao层 ,该层主要处理数据库的操作!
import { MusicModel } from '../model/music'; // 导入模型
class Music {
static async addcontent (v) {
return MusicModel.create(v);
}
}
export { Music as MusicDao };
6.最后我们创建一个服务层 ,专心处理我们的业务!
在app目录下面创建一个service 目录新增 test.js
import { MovieDao } from '../dao/movie';
import { MusicDao } from '../dao/music'; //导入dao层
class Test {
//定义一个方法 //ctx 表示 接收的上下文 根据不同的内容做对应的处理 可以用一个switch 控制
static async addcontent(ctx){
switch(ctx['type']){
case 100:
//新增处理逻辑 此处只处理业务,不对数据库进行操作!
MovieDao.add(v)
break;
case 200:
delete v['url'] //删除不必要的参数传递
MusicDao .add(v)
break;
default:
//默认处理逻辑 、没有找到的时候可以返回一个自定义异常
throw new NotFound({msg:'type类型没有找到'})
}
}
}
export {Test as TestService} //导出服务
现在我们回到api 里面调用一下我们自己的服务吧! >.<
步骤二的代码
import { LinRouter } from 'lin-mizar'; //引入lin 封装好的koa-router
import { TestValidator } from '../../validator/test'; //导入的验证层
import { contentService } from '../../service/content'; //导入我们的服务层
const ContentApi = new LinRouter({
prefix: '/v1/Content' //安装的接口路径
});
ContentApi.post('/', async ctx => {
const v = await new TestValidator().validate(ctx);
await contentService.addcontent(v.get('body')) //调用服务,返回一个permise await
ctx.success({
message:'新增成功' //这里可以更改默认的返回信息
})
});
module.exports = { ContentApi }; //暴露接口
恭喜 !现在 使用postman 测试一下 你自己的接口吧~~