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

相关文章
可能是目前市面上比较有诚意的Koa2源码解读
0,前言 阅读本文前,需要对koa2(以下简称Koa)和es6有一定了解。 本文会以如下的顺序: 1,koa是什么; 2,初读koa源码; 3,精读koa源码; 3.1,中间件机制解读 3.2,如何将generator函...
2018-03-22
koa 源码解析
koa 框架是基于 Node.js 下一代的 web server 框架, 舍弃了回调写法, 提高了错误处理效率, 而且其不绑定任何中间件, 核心代码只提供优雅轻量的函数库. 平时经常使用到 koa 框架, 所以希望通过阅读源码学习其思想,...
2018-04-03
koa2+vue+axios搭建一个博客台管理系统之session踩坑
原文发布在我的个人博客:http://www.brandhuang.com 下面就开始我的表演 一、先说一下我博客管理系统和服务端用到的东西 我的博客的服务端是采用的koa2 + MySQL,后台管理界面采用的是:Vue+Element...
2018-08-23
全面理解 koa-router
koa 框架一直都保持着简洁性, 它只对 node 的 HTTP 模块进行了封装, 而在真正实际使用, 我们还需要更多地像路由这样的模块来构建我们的应用, 而 koa-router 是常用的 koa 的路由库. 这里通过解析 koa-rou...
2018-06-03
Node.js使用Koa搭建 基础项目
Koa 是由 Express 原班人马打造的超轻量服务端框架 与 Express 相比,除了自由度更高,可以自行引入中间件之外,更重要的是使用了 ES6 + async,从而避免了回调地狱 不过也是因为代码升级,所以 Koa2 需要 v7....
2018-01-08
用Decorator控制Koa路由
在Spring中Controller长这样 @Controller public class HelloController{ @RequestMapping(&quot;&#x2F;hello&quot;) String...
2018-06-21
iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 代码分层
视频地址:https://www.cctalk.com/v/15114923889408 在前面几节中,我们已经实现了项目中的几个常见操作:启动服务器、路由中间件、Get 和 Post 形式的请求处理等。现在你已经迈出了走向成功的第一步。...
2018-01-03
详解React项目的服务端渲染改造(koa2+web
因为对网页SEO的需要,要把之前的React项目改造为服务端渲染,经过一番调查和研究,查阅了大量互联网资料。成功踩坑。 选型思路:实现服务端渲染,想用React最新的版本,并且不对现有的写法做大的改动,如果一开始就打算服务端渲染,建议直接用...
2018-03-20
理解 Koa 的中间件机制
中间件概念在编程中使用广泛, 不管是前端还是后端, 在实际编程中或者框架设计都有使用到这种实用的模型, 下面我们就来谈谈它的作用. &lt;a id=“more”&gt;&lt;/a&gt; 面向切面编程(AOP) 相信很多人都听过所谓的 ...
2018-03-17
node项目实战-用node-koa2-mysql-bootstrap搭建一个前端论坛
前言 在学习了koa2和express并写了一些demo后,打算自己写一个项目练练手,由于是在校生,没什么好的项目做,即以开发一个前端论坛为目标,功能需求参照一下一些社区拟定,主要有: 登录注册 个人信息维护、头像等基本信息 发表文章,富...
2018-05-05
回到顶部