decorator of koa route
npm i --save @khgame/decorator-koa-router
or
yarn add @khgame/decorator-koa-router
To use this lib with typescripts, option experimentalDecorators should be enabled in the tsconfig.json
- import methods api, controller and constant HttpMethod
import { api, controller, HttpMethod } from "@khgame/decorator-koa-router"- decorate
@controllerfor your controller class and@apifor your method
@controller("user")
export class userController {
@api("get_user")
getUser(ctx){
}
}- register them in your service entrance
import { router, useController } from "@khgame/decorator-koa-router";
useController(`${__dirname}/your_controller_file`)
router.prefix("/api"); // is you want a api prefix
app.use(router.routes()).use(router.allowedMethods()); // the controller will registered automaticallyif you are using index file to export all controllers, for example
// controllers/index.ts or controllers/index.js
export * from './userController';
export * from './resController';
...
// service.js
import { router, useController } from "@khgame/decorator-koa-router";
useController(`${__dirname}/controllers`)the only file need to apply useController is the index file
4. further more, you can use useFolder to load all controllers recursively in a folder
// for folder structure:
// controllers/userController.ts
// controllers/resController.ts
// controllers/more/bookController.ts
import { router, useFolder } from "@khgame/decorator-koa-router";
useFolder(`${__dirname}/controllers`) // load: userController and resController
useFolder(`${__dirname}/controllers`, true) // recursice load: all controllers@controller(path: string, ...middleware: Middleware[])- path are required
- must decorate to the class
@api(path?: string, method?: HttpMethod, ...middleware: Middleware[])- path are optioned, the slash "/" should be added manually
@api("/show_me_the_money") - when path are set as
undefinedor left empty, the api name is the methods name
@api()
@api(undefined, HttpMethod.GET) - using only one "/" to set path as the root of the controller
@api("/") - you can set method by bit operation, for example
api(path?: string, method?: HttpMethod, ...middleware: Middleware[])
- path are optioned, the slash "/" should be added manually
see ./bench