koa-router-decorator-plugin
TypeScript icon, indicating that this package has built-in type declarations

0.0.5 • Public • Published

koa-router-decorator-plugin

一个 koa router 装饰器

安装

npm i koa-router-decorator-plugin --save

使用

controller/example01.ts 文件配置如下:

import { Controller, RequestMapping } from "koa-router-decorator-plugin";

@Controller
export default class {
  @RequestMapping({ method: "GET", url: "/example01" })
  async example01(ctx) {
    ctx.body = "example01";
  }
}

或者, 添加 koa-router 通用配置,

controller/example02.ts 文件配置如下:

import { Controller, RequestMapping } from "koa-router-decorator-plugin";

@Controller({ prefix: "/prefix" })
export default class {
  @RequestMapping({ method: "GET", url: "/example02" })
  async example01(ctx, _) {
    ctx.body = "example02";
  }

  @RequestMapping({ method: "GET", url: ["/example03", "/example04"] })
  async example02(ctx, _) {
    ctx.body = "example03";
  }
}

koakoa-router 中使用,

import * as Koa from "koa";
import * as KoaRouter from "koa-router";
import * as path from "path";
import KoaDecoratorRouter, {
  loadDecoratorRouter
} from "koa-router-decorator-plugin";

const app = new Koa();
const router = new KoaRouter();

// 1.加载配置 controller 文件
loadDecoratorRouter({
  dir: path.join(__dirname, "/path/to/controller"),
  extension: ".ts"
});

router.get("/heartbeats", async (ctx, _) => {
  ctx.body = "success";
});

app.use(router.routes()).use(router.allowedMethods());

// 2.app.use 使用已配置的路由
app.use(KoaDecoratorRouter.routes()).use(KoaDecoratorRouter.allowedMethods());

app.listen(4000);

输出结果:

http.get("http://localhost:4000/heartbeats"); // output: success

http.get("http://localhost:4000/example01"); // output: example01

http.get("http://localhost:4000/prefix/example02"); // output: example02

http.get("http://localhost:4000/prefix/example03"); // output: example03

http.get("http://localhost:4000/prefix/example04"); // output: example04

API

@Controller

参数:支持传入 koa-router Router instance 中所有的方法。不传参,可以直接调用 @Controller 来使用。

router.prefix, 可以这么配置 @Controller({prefix: '/user'});

Router instance 方法中多参数调用,需要以数组形式参入。

例如,

router.url("user", { id: 3 }, { query: { limit: 1 } });

可以这么配置,

@Controller({url: ['user', { id: 3 }, {query: { limit: 1 }}]});

@RequestMapping({method: string, url: string | string[], middleware?: []})

method

koa router HTTP METHOD 值,支持大小写

url

koa router 中请求 url 配置,可传递 url 数组

middleware

请求中间件配置,

@RequestMapping({
  method: 'GET',
  url: '/users/:id',
  middleware: [
   (ctx, next) => {
     return User.findOne(ctx.params.id).then(function(user) {
       ctx.user = user;
       next();
     });
   },
   // ...middleware
  ]
})
ctx => {
 console.log(ctx.user);
}

转化为 koa-router 配置,

router.get(
  "/users/:id",
  (ctx, next) => {
    return User.findOne(ctx.params.id).then(function(user) {
      ctx.user = user;
      next();
    });
  },
  // ...middleware
  ctx => {
    console.log(ctx.user);
  }
);

loadDecoratorRouter(dir: string, extension?: string)

该方法调用之后,将写入 koa-router-decorator-plugin 里的全局变量, koa 使用的时候,直接从 koa-router-decorator-plugin 导出这个全局变量 KoaDecoratorRouter 使用即可。

dir

使用 koa-router-decorator-plugin 配置文件目录路径

extension(default = '.js')

匹配配置文件的拓展名

不使用 loadDecoratorRouter 全局引用,也可以单个文件引用,示例如下:

import "path/to/controller.ts";
import KoaDecoratorRouter from "koa-router-decorator-plugin";

app.use(KoaDecoratorRouter.routes()).use(KoaDecoratorRouter.allowedMethods());

Package Sidebar

Install

npm i koa-router-decorator-plugin

Weekly Downloads

0

Version

0.0.5

License

MIT

Unpacked Size

13.1 kB

Total Files

6

Last publish

Collaborators

  • nelayah