koa-decorate为koa.InstallConfig的路由器中间件提供装饰器koa-decorate是基于es7提供的装饰器,但是nodejs暂时不支持装饰器。所以我们需要使用typescript来开发我们的应用程序,我们可以直接通过ts-node运行我们的typescript,无需离线编译。npminstall--save-devts-nodenodemonnodemon.json{"restartable":"rs","ignore":[".git","node_modules"],"verbose":true,"execMap":{"ts":"ts-node"},"watch":["controller","app.ts"],"ext":"ts"}APIReferencekoa-decorateDecorator?[newDecorator([opts])](#module_koa-decorate--Decorator_new).routes?functiondecoratorhttp-method?@Get|@Post|@Put|@Delete|@Allpath?@Pathparameter?@Param|@Query|@Body|@Ctx|@Nexthook?@Before|@AfterControllerDecoratorKind:ExportedclassnewDecorator([opts])创建一个新的装饰router.ParamTypeDescription[opts]Object[opts.router]Objectkoa-router实例[opts.controllers]ObjectroutecontrollerclassesDecorator.routes?functionReturnsroutermiddlewarewhichdispatchsaroutematchingtherequest.Kind:InstancepropertyofDecoratorExample基本用法://app.tsimportKoafrom'koa';importRouterfrom'koa-router';import来自'koa-decorate'的装饰器;从'./controller'导入控制器;//路由控制器类constroutes=newDecorator({router:newRouter(),controllers:Controller}).routes();app.use(routes);http-method?@Get|@Post|@Put|@Delete|@AllCreate@Verb方法来匹配HTTP方法,其中Verb是HTTP动词之一,例如@Get或@Post等。此外,@All可用于匹配所有方法。示例//CatController.tsimport{Path,Get,Post}来自'koa-decorate';@Path('/api/cat')classCatController{@Get@Path('/info')getCatInfo(){return{id:1,name:'LinaWeiss',type:'挪威森林猫'}}@Post@Path('/info/')CreateCat(){return{status:200,data:{id:2},message:'Createdsuccessfully...'}}}export{CatController};path?@PathMatch使用@Path回调函数或控制器操作的URL模式,当authFunc返回true时,controller可以执行逻辑动作,否则访问被拒绝。ParamTypeDescriptionpathString[authFunc]Function=>BooleanroutecallbackExample//CatController.tsimport{Path,Get}from'koa-decorate';@Path('/api/cat')classCatController{@Get@Path('/info/:id',(ctx)=>Number(ctx.params.id)===1)getCatInfo(){return{id:1,name:'丽娜Weiss',type:'NorwegianForestCat'}}}export{CatController};parameter?@Param|@Query|@Body|@Ctx|@NextCreate@Parameter装饰器,其中Parameter是参数名称之一,例如@Param,@Query,@Bodyetc.ParamTypeDescriptionnameString示例//CatController.tsimport{Path,Get,Post,Param,Query,Body,Ctx}from'koa-decorate';@Path('/api/cat')classCatController{@Get@Path('/info/:type')getCatInfo(@Param('type')类型:字符串,@Query('info')info:string){return{type,info}}@Post@Path('/info/:type')CreateCat(@Param('type')type:string,@Body('requestBody')requestBody:any){return{status:200,data:Object.assign(requestBody,{type}),message:'创建成功...'}}}export{CatController};hook?@Before|@AfterWhen路由匹配正确,hookFunc用于处理@Before和@Afterprocessing.ParamTypeDescription[hookFunc]FunctioncallbackhookExample//CatController.tsimport{Path,Get,Param,Query,Before,After}from'koa-decorate';@Path('/api/cat')classCatController{@Get@Path('/info/:type')@Before((ctx,next)=>{//...})@After((ctx,next)=>{//...})getCatInfo(@Param('type')类型:string,@Query('info')info:string){return{type,info}}}export{CatController};ControllerKind:路由控制器类的字典Example//Controller/index.tsimport{CatController}from'./cat';exportdefault{Cat:CatController};LicencesMIT
