koa-decorate

2018-10-12 admin

npm downloads Travis <a>License</a>

Provides decorators for router middleware of koa.

Install

NPM

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

Decorator

Kind: Exported class <a></a>

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](#module_koa-router--Decorator_new)

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

<a>MIT</a>

原文链接:https://segmentfault.com/a/1190000016661321

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-42532.html

文章标题:koa-decorate

相关文章
5分钟实现一个Koa
原文地址 周五组内同学讨论搞一些好玩的东西,有人提到了类似『5分钟实现koa』,『100行实现react』的创意,仔细想了以后,5分钟实现koa并非不能实现,遂有了这篇博客。 准备 先打开koa官网,随意找出了一个代表koa核心功能的的...
2018-06-03
koa 源码解析
koa 框架是基于 Node.js 下一代的 web server 框架, 舍弃了回调写法, 提高了错误处理效率, 而且其不绑定任何中间件, 核心代码只提供优雅轻量的函数库. 平时经常使用到 koa 框架, 所以希望通过阅读源码学习其思想,...
2018-04-03
Node.js使用Koa搭建 基础项目
Koa 是由 Express 原班人马打造的超轻量服务端框架 与 Express 相比,除了自由度更高,可以自行引入中间件之外,更重要的是使用了 ES6 + async,从而避免了回调地狱 不过也是因为代码升级,所以 Koa2 需要 v7....
2018-01-08
详解React项目的服务端渲染改造(koa2+web
因为对网页SEO的需要,要把之前的React项目改造为服务端渲染,经过一番调查和研究,查阅了大量互联网资料。成功踩坑。 选型思路:实现服务端渲染,想用React最新的版本,并且不对现有的写法做大的改动,如果一开始就打算服务端渲染,建议直接用...
2018-03-20
用Decorator控制Koa路由
在Spring中Controller长这样 @Controller public class HelloController{ @RequestMapping(&quot;&#x2F;hello&quot;) String...
2018-06-21
全面理解 koa-router
koa 框架一直都保持着简洁性, 它只对 node 的 HTTP 模块进行了封装, 而在真正实际使用, 我们还需要更多地像路由这样的模块来构建我们的应用, 而 koa-router 是常用的 koa 的路由库. 这里通过解析 koa-rou...
2018-06-03
webpack+vue+koa+mongoDB,从零开始搭建一个网站
第一天 webpakc+vue的搭建 1.新建项目文件夹(see-films); 2.npm init //初始化项目 3.搭建webpack的基本框架 同时安装依赖 npm i -D webpack(版本号4.14.0) npm i...
2018-07-02
Koa2框架利用CORS完成跨域ajax请求
实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。 本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明(深层次的配置我也不会)。 CORS将请求分为简单请求和非简单请求,可以简单的认为,...
2018-03-06
理解 Koa 的中间件机制
中间件概念在编程中使用广泛, 不管是前端还是后端, 在实际编程中或者框架设计都有使用到这种实用的模型, 下面我们就来谈谈它的作用. &lt;a id=“more”&gt;&lt;/a&gt; 面向切面编程(AOP) 相信很多人都听过所谓的 ...
2018-03-17
iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理
沪江CCtalk视频地址:https://www.cctalk.com/v/15114923887518 爱能遮掩一切过错。 当我们在访问一个站点的时候,如果访问的地址不存在(404),或服务器内部发生了错误(500),站点会展示出某...
2018-02-02
回到顶部