DavidCai1111 / koa-decorators

:art: Decorate koa

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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'
  }
}

About

:art: Decorate koa

License:MIT License


Languages

Language:JavaScript 100.0%