资讯专栏INFORMATION COLUMN

koa-decorate

goji / 2215人阅读

koa-decorate




Provides decorators for router middleware of koa.
Install

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

koa-decorate

Decorator ⏏

[new Decorator([opts])](#module_koa-decorate--Decorator_new)

.routes ⇒ function

decorator

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

path ⇒ @Path

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

hook ⇒ @Before|@After

Controller

Decorator

Kind: Exported class

new Decorator([opts])

Create a new decorated router.

Param Type Description
[opts] Object
[opts.router] Object koa-router instance
[opts.controllers] Object route 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.

Param Type Description
path String
[authFunc] Function => Boolean route 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.

Param Type Description
name String

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.

Param Type Description
[hookFunc] Function callback 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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98317.html

相关文章

发表评论

0条评论

goji

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<