qails能根据model自动创建RESTful路由地址,该功能由 qails/util/resource.js
提供。
根据模型创建 CRUD 路由,ResourceRouter 继承了 koa-router。
router.crud()
,即自动创建 CRUD 方法/api
,默认为空tableName
import { Resource } from 'qails'; import Role from '../models/roles'; export default Resource.define(Role);
上面的代码会自动创建以下路由:
提交方式 | 路由 | 说明 |
---|---|---|
POST | /roles | 新建一个角色 |
GET | /roles | 列出所有角色 |
GET | /roles/:id | 获取某个指定角色的信息 |
PATCH | /roles/:id | 更新某个指定角色的信息 |
DELETE | /roles/:id | 删除某个角色 |
import { Resource } from 'qails'; import Role from '../models/roles'; export default Resource.define(Role, { setup(router) { router.create().read().update(); } });
上面的代码会自动创建以下路由:
提交方式 | 路由 | 说明 |
---|---|---|
POST | /roles | 新建一个角色 |
GET | /roles | 列出所有角色 |
GET | /roles/:id | 获取某个指定角色的信息 |
PATCH | /roles/:id | 更新某个指定角色的信息 |
import { Resource } from 'qails'; import Role from '../models/roles'; export default Resource.define(Role, { prefix: '/api' });
上面的代码会自动创建以下路由:
提交方式 | 路由 | 说明 |
---|---|---|
POST | /api/roles | 新建一个角色 |
GET | /api/roles | 列出所有角色 |
GET | /api/roles/:id | 获取某个指定角色的信息 |
PATCH | /api/roles/:id | 更新某个指定角色的信息 |
DELETE | /api/roles/:id | 删除某个角色 |
import { Resource } from 'qails'; import Role from '../models/roles'; export default Resource.define(Role, { root: 'jiaose' });
上面的代码会自动创建以下路由:
提交方式 | 路由 | 说明 |
---|---|---|
POST | /jiaose | 新建一个角色 |
GET | /jiaose | 列出所有角色 |
GET | /jiaose/:id | 获取某个指定角色的信息 |
PATCH | /jiaose/:id | 更新某个指定角色的信息 |
DELETE | /jiaose/:id | 删除某个角色 |
有时候需要在标准的路由前后加入一些业务规则中间件,如新增一条记录后需要在日志表中记录操作人日志,这时候可以在创建路由时注入中间件。可以在以下位置注入中间件:
参数名称 | 参数类型 | 适用patten | 说明 |
---|---|---|---|
beforeMiddlewaves | Function Array | all | 在标准路由前执行 |
afterMiddlewaves | Function Array | all | 在标准路由后执行 |
beforeListMiddlewaves | Function Array | /models | 在标准获取列表路由前执行 |
afterListMiddlewaves | Function Array | /models | 在标准获取列表路由后执行 |
beforeItemMiddlewaves | Function Array | /models/:model | 在标准获取详情路由前执行 |
afterItemMiddlewaves | Function Array | /models/:model | 在标准获取详情路由后执行 |
import { Resource } from 'qails'; import Log from '../models/log'; export default Resource.define(Log, { setup(router) { router.read({ beforeMiddlewaves: [ async(ctx, next) => { console.log('===before==='); await next(); } ], afterMiddlewaves: async(ctx, next) => { console.log('===after==='); await next(); } }); } });
可以在查询列表的接口中通过 querystring
参数控制返回结构,支持的控制参数有:
where=id,>,10,name,like,%abc%
where[id]=10
where=id&where==&where=10
假设表名称是 tb_roles
,希望创建的路由是 roles
,这需要在创建路由时指定 name
参数:
// routes/role.js import { Resource } from 'qails'; import Role from '../models/role'; export default Resource.define(Role, { name: 'roles' });
同时指定 model 名称
// models/role.js import { Model } from 'qails'; export default class extends Model { get tableName() { return 'tb_roles'; } }
如果你发现文档存在错误,请在 GitHub 提个 issue 告诉我们。