koa-decorators

1.4.0 • Public • Published

koa-decorators

js-standard-style Build Status Coverage Status

Use decorators as single-controller-level koa middlewares or define some meta data for the controller, for now only support koa 2.

Installation

npm install koa-decorators

Decorators

Methods

Docs

@router

Specified the router information for the controller.

It accepts two arguments:

  • method: String, the HTTP method, required.
  • path: String, the path, required.

route(app, path)

Mount all routers specified by the @router decorator.

  • app: Object, an instance of Koa.
  • path: String, path to the directory of routers.

Example

Supposed that all your router files are put in ./apis:

// apis/user.js
'use strict'
const {router} = require('koa-decorators')
 
module.exports = class UserController {
  @router({method: 'GET', path: '/user'})
  async getUser (ctx) {
    ctx.body = 'user'
  }
}

And in outside app.js:

// app.js
'use strict'
const Koa = require('koa')
const {route} = require('koa-decorators')
 
const app = new Koa()
 
route(app, `${__dirname}/apis`)
 
app.listen(3003)

Then koa-decorators will help you to mount all routers in ./apis:

> curl localhost:3003/user
> user

@required

Add a koa middleware for the router to make sure some parameters should be in query-string or request body.

It accepts two arguments:

  • query: Array<String>, all keys required in query-string, optional.
  • body: Array<String>, all keys required in request body, optional.

Example

// apis/user.js
'use strict'
const {router, required} = require('koa-decorators')
 
module.exports = class UserController {
  @router({method: 'GET', path: '/user'})
  @required({query: 'id'})
  async getUserById (ctx) {
    ctx.body = 'user'
  }
}
> curl localhost:3003/user
> 412 Query: id required
 
> curl localhost:3003/user?id=1
> user

convert(fun)

Convert an async function to koa middleware decorator.

This method accepts one argument:

  • fun: Function, the async function to be converted.

Example

'use strict'
const {convert} = require('koa-decorators')
 
async function someFun (ctx, next) {
  await next()
}
 
const converted = convert(someFun)
 
module.exports = class {
  @router({method: 'GET', path: '/convert'})
  @converted
  async convert (ctx) {
    ctx.body = 'converted'
  }
}

Package Sidebar

Install

npm i koa-decorators

Weekly Downloads

0

Version

1.4.0

License

MIT

Last publish

Collaborators

  • qqqppp9998