koa-decorate

koa-decorate为Koa的路由中间件提供了装饰器支持,利用es7装饰器特性,无需编译直接运行TypeScript代码。通过@Get、@Post等装饰器匹配HTTP方法,@Path指定路由路径,@Param、@Query等处理参数,以及@Before、@After钩子函数,简化了路由控制器的开发。

koa-decorate

npm
downloads
Travis
License

Provides decorators for router middleware of koa.

Install

NPM

Config

Koa-decorate is based on the decorator provided by es7,
but nodejs does not support the decorator temporarily.
so we need to use typescript to develop our application,
we can run our typescript directly through ts-node without offline compiling.
npm install --save-dev ts-node nodemon

nodemon.json

{
  "restartable": "rs",
  "ignore": [
    ".git",
    "node_modules"
  ],
  "verbose": true,
  "execMap": {
    "ts": "ts-node"
  },
  "watch": [
    "controller",
    "app.ts"
  ],
  "ext": "ts"
}

API Reference

Decorator

Kind: Exported class

new Decorator([opts])

Create a new decorated router.

ParamTypeDescription
[opts]Object
[opts.router]Objectkoa-router instance
[opts.controllers]Objectroute controller classes

Decorator.routes ⇒ function

Returns router middleware which dispatches a route matching the request.

Kind: instance property of Decorator

Example
Basic usage:

// app.ts
import Koa from 'koa';
import Router from 'koa-router';
import Decorator from 'koa-decorate';

import Controller from './controller'; // Route controller classes

const routes = new Decorator({
  router: new Router(),
  controllers: Controller
}).routes();

app.use(routes);

http-method ⇒ @Get|@Post|@Put|@Delete|@All

Create @Verb methods to match against HTTP methods, where Verb is one of the HTTP verbs
such as @Get or @Post etc.

Additionaly, @All can be used to match against all methods.

Example

// CatController.ts
import { Path, Get, Post } from 'koa-decorate';

@Path('/api/cat')
class CatController {

  @Get
  @Path('/info')
  getCatInfo () {
    return {
      id: 1,
      name: 'Lina Weiss',
      type: 'Norwegian Forest Cat'
    }
  }

  @Post
  @Path('/info/')
  CreateCat () {
    return {
      status: 200,
      data: {
        id: 2
      },
      message: 'Created successfully...'
    }
  }

}

export { CatController };

path ⇒ @Path

Match URL patterns to callback functions or controller actions using @Path,
when authFunc returns true, controller can execute logical actions, otherwise access denied.

ParamTypeDescription
pathString
[authFunc]Function => Booleanroute callback

Example

// CatController.ts
import { Path, Get } from 'koa-decorate';

@Path('/api/cat')
class CatController {

  @Get
  @Path('/info/:id', (ctx) => Number(ctx.params.id) === 1)
  getCatInfo () {
    return {
      id: 1,
      name: 'Lina Weiss',
      type: 'Norwegian Forest Cat'
    }
  }
}

export { CatController };

parameter ⇒ @Param|@Query|@Body|@Ctx|@Next

Create @Parameter decorators, where Parameter is one of the parameter-names such
as @Param, @Query, @Body etc.

ParamTypeDescription
nameString

Example

// CatController.ts
import { Path, Get, Post, Param, Query, Body, Ctx } from 'koa-decorate';

@Path('/api/cat')
class CatController {

  @Get
  @Path('/info/:type')
  getCatInfo (
      @Param('type') type: string,
      @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: 'Created successfully...'
    }
  }

}

export { CatController };

hook ⇒ @Before|@After

When the routing match is correct, the hookFunc is used to deal with
the transactions @Before and @After processing.

ParamTypeDescription
[hookFunc]Functioncallback hook

Example

// CatController.ts
import { Path, Get, Param, Query, Before, After } from 'koa-decorate';

@Path('/api/cat')
class CatController {

  @Get
  @Path('/info/:type')
  @Before((ctx, next) => {
    // ...
  })
  @After((ctx, next) => {
    // ...
  })
  getCatInfo (
      @Param('type') type: string,
      @Query('info') info: string) {
    return { type, info }
  }

}

export { CatController };

Controller

Kind: The dictionary of route controller classes

Example

// Controller/index.ts
import { CatController } from './cat';

export default {
  Cat: CatController
};

Licences

MIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值