feature
- route
- param
- query
- loginCheck
- 基于
stage-1
的decorator,使用@babel/plugin-proposal-decorators
插件时需要设置{"legacy": true}
Install
npm i koa-serve-decorator
API
@route(path: string, method?: string)
声明一个路由,可以装饰到类/方法上,可以在routeAll
时提供base: String
来设置baseURL
@param(param: Object)
声明body参数的校验规则,如果不满足会抛出异常,会对ctx.request.body
和ctx.params
的内容进行校验,不能出现相同的变量名,因为是合在一起校验的
@query(param: Object)
声明query参数的校验规则,如果不满足会抛出异常
参数校验依赖于
validator-biang
@loginCheck
声明是否需要检查用户是否登录,依赖jsonwebtoken
,使用时需要在routeAll
时提供jwtSecret: String
, getToken: Function
两个值
@service
装饰一个类,会在类中注入ctx成员,同时创建一个该类的对象挂载在ctx中,且不同的service之间可以互相调用。
@beforeRoute
装饰service的类成员函数,此service的成员函数会在每次用户请求时被调用
@afterRoute
装饰service的类成员函数,此service的成员函数会在每次用户请求后被调用
routeAll(options: Object)
因为@loginCheck
, @route
, @param
, @query
之间在实现的层面存在顺序问题,所以他们的初始化都使用同一个routeAll函数
,当然,使用的顺序是不会影响结果的,serviceAll
应该在routeAll
前被注册
options
jwtSecret: string
提供jsonwebtoken
库所需要的jwtSecret
getToken: Function
提供@loginCheck
所需要的token
来源。base: [0: path, 1?: method]
提供所有@route
标记的控制器的根路径- e.g.
base: ['/api', 'all']
- e.g. 只设置
method
base: ['/', 'all']
- e.g. 只设置
path
base: ['/']
- e.g.
serviceAll()
初始化所有的@service
,实现service标记的功能,serviceAll
应该在routeAll
前被注册
initAll(options: Object)
初始化全部decorators,会顺序调用serviceAll
与routeAll
options: Object
route: Object
routeAll
的参数dirs: [[string]]
指定该参数可以自动include所有的路由类和Service类,基于require-all
- e.g. 后面recursive部分的其它配置参考require-all的配置
- 当前默认的配置是
filter: /.js$/
- e.g. 后面recursive部分的其它配置参考require-all的配置
- service还没有相关参数,所以位置如此预留了
const Koa = ;const route param query loginCheck service initAll = ; @ @ //id必须存在,同时为非空字符串 //详细规则参考 https://github.com/longjiahui/validator-biang @ async { //路由是 get /post/:id } @loginCheck @ @ async { //路由是 put /post/save //这里可以访问service ctxbService; ctxaService; } @service { console; //service可以访问service 或者ctx的其它内容 thisctxbService; }@service { console; } let app = ;app;app;
错误捕获
已经错误会以错误码提供,详细信息参考err.msg
字段
//一个middlewareconst errno = ; moduleexports = async { try await ; catcherr iferrcode === errnoERR_ARG //参数校验错误 console;
errno
错误码 ERR_ARG
参数错误ERR_NOTOKEN
loginCheck时没获得tokenERR_VERIFY_ERROR
loginCheck校验失败ERR_GETTOKEN_ERROR
获取token失败,ERR_GETJWTSECRET_ERROR
获取jwtScret失败