koa-decorate

    0.2.5 • Public • Published

    koa-decorate

    npm downloads Travis License

    koa-router 提供装饰器。

    安装

    NPM

    应用配置

    Koa-decorate 基于 es7 提供的装饰器, 但是 NodeJs 暂时不支持装饰器语法糖。 所以我们需要使用 TypeScript 开发我们的应用, 我们可以通过 ts-node 直接运行 TypeScript,无需通过线下先编译。

    npm install --save-dev ts-node nodemon

    *配置 nodemon.json (使用详情请查看koa-app) *

    {
      "restartable": "rs",
      "verbose": true,
      "execMap": {
        "ts": "ts-node",
        "js": "node"
      },
      "watch": [
        "src"
      ],
      "ext": "ts"
    }

    API 使用说明

    Decorator

    类别: 工厂类

    new Decorator([opts])

    创建一个 koa-decorate 实例。

    参数 类别 描述
    [opts] Object
    [opts.router] Object koa-router 实例
    [opts.controllers] Object 路由控制器类

    Decorator.routes ⇒ function

    该方法用来装载控制器,并派发与请求想匹配的路由,返回一个 koa 中间件。

    类别Decorator 的实例属性。

    举例
    基础用法:

    // app.ts
    import Koa from 'koa';
    import Router from 'koa-router';
    import Decorator from 'koa-decorate';
     
    import Controller from './controller'; // 路由控制器类
     
    const router = new Decorator({
        router: new Router(),
       controllers: Controller
    });
     
    app.use(router.routes());

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

    创建 @Verb 方法来匹配 HTTP 方法,Verb 是 HTTP 动词中的一个,像 @Get or @Post 等。

    另外, @All 可以与所有的 HTTP 方法相匹配。

    举例

    // CatController.ts
    import { Path, Get, Post } from 'koa-decorate';
     
    @Path('/api/cat')
    class CatController {
     
       @Get
       @Path('/info')
       async getCatInfo () {
         return await new Promise(resolve => {
                setTimeout(() => resolve({
                    id: 1,
                    name: 'Lina Weiss',
                    type: 'Norwegian Forest Cat',
                }), 1000);
         })
      }
     
        @Post
        @Path('/info/')
        async CreateCat () {
            return {
                status: 200,
                data: {
                    id: 2
                },
                message: 'Created successfully...',
            };
        }
     
    }
     
    export { CatController };

    path ⇒ @Path

    将 URL 与回调函数或控制器相匹配使用 @Path,当 authFunc 返回 true ,控制器可以执行逻辑操作,否则拒绝访问。

    参数 类别 描述
    path String
    [authFunc] Function => Boolean 验证回调函数,非必须

    举例

    // CatController.ts
    import { Path, Get } from 'koa-decorate';
     
    @Path('/api/cat')
    class CatController {
     
       @Get
       @Path('/info/:id', (ctx) => Number(ctx.params.id) === 1)
       async getCatInfo () {
         return {
           id: 1,
           name: 'Lina Weiss',
           type: 'Norwegian Forest Cat'
         };
        }
    }
     
    export { CatController };

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

    @Parameter 类型的装饰器用来修饰 URL 中的参数或 koa 回调路由回调中的参数,Parameter 可以是 @Param@Query@Body@Ctx@Next 中的一个。(函数形参修饰器只有 TypeScript 支持)

    参数 类别 描述
    name String

    举例

    // CatController.ts
    import { Path, Get, Post, Param, Query, Body, Ctx } from 'koa-decorate';
     
    @Path('/api/cat')
    class CatController {
     
       @Get
       @Path('/info/:type')
       async getCatInfo (@Param('type') type: string,
                    @Query('info') info: string,
        ) {
         return { type, info };
       }
     
       @Post
       @Path('/info/:type')
       async 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

    当 URL 与路由匹配正确后,在执行控制器逻辑前会先执行 @BeforehookFunc ,处理完控制器逻辑后会执行 @AfterhookFunc

    参数 类别
    [hookFunc] Function 回调钩子

    举例

    // 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) => {
        // ...
       })
        async getCatInfo (@Param('type') type: string,
                      @Query('info') info: string,
        ) {
         return { type, info };
       }
    }
     
    export { CatController };

    Controller

    Kind: 导出一个路由控制器集合的 HashMap

    Example

    // Controller/index.ts
    import { CatController } from './cat';
     
    export default {
      Cat: CatController
    };
     

    示例

    koa-app

    Licences

    MIT

    Install

    npm i koa-decorate

    DownloadsWeekly Downloads

    24

    Version

    0.2.5

    License

    MIT

    Unpacked Size

    35.9 kB

    Total Files

    16

    Last publish

    Collaborators

    • liupei127