@khgame/decorator-koa-router
v0.1.3
Published
decorator of koa router
Downloads
7
Maintainers
Readme
decorator-koa-router.ts
decorator of koa route
Usage
install
npm i --save @khgame/decorator-koa-router
oryarn add @khgame/decorator-koa-router
in code
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
@controller
for your controller class and@api
for your method
@controller("user")
export class userController {
@api(HttpMethod.GET | HttpMethod.POST, "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 automatically
if 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
Detail of decorate
@controller(path: string, ...middleware: Middleware[])
- path are required
- must decorate to the class
@api(method?: HttpMethod, path?: string, ...middleware: Middleware[])
- path are optioned, the slash "/" should be added manually
@api("/show_me_the_money")
- when path are set as
undefined
or 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
- HttpMethod
export enum HttpMethod {
GET = 0x01,
POST = 0x02,
PUT = 0x04,
DELETE = 0x08,
HEAD = 0x10,
OPTIONS = 0x20,
PATCH = 0x40,
BASIC = GET | POST,
ALL = BASIC | PUT | DELETE | HEAD | OPTIONS | PATCH
}
More Example
see ./bench