egg-decorator-router

1.0.7 • Public • Published

egg-decorator-router

NPM version build status Test coverage David deps Known Vulnerabilities npm download

Define egg.js router and middleware use decorator.

Install

npm i egg-decorator-router --save

Usage

// {app_root}/config/plugin.js
exports.decoratorRouter = {
  enable: true,
  package: 'egg-decorator-router'
}

基于 typescript 的 eggjs 项目可直接使用装饰器
如果是 js 项目,则需要手动安装 babel-plugin-transform-decorators-legacybabel-plugin-transform-object-rest-spread这两个包,并在项目里加入 .babelrc 文件

.babelrc 定义如下:

{
  "plugins": ["transform-decorators-legacy", "transform-object-rest-spread"]
}

Specification

The full path is combin between root-path and sub-path.

在 controller 中先引入依赖

const {
  Route,
  HttpAll,
  HttpGet,
  HttpPost,
  HttpPut,
  HttpPatch,
  HttpDelete,
  Middleware 
= require('egg-decorator-router')

如果使用 typescript

import {
  Route,
  HttpAll,
  HttpGet,
  HttpPost,
  HttpPut,
  HttpPatch,
  HttpDelete,
  Middleware
} from 'egg-decorator-router'

Use Route define a root-path on the controller

Define a root path on controller

// root path is '/'
@Route()
 
// root path is '/'
@Route('/')
 
// root path is '/routename'
@Route('/routename')
 
// root path is '/routename/action'
@Route('/routename/action')

Parameter is available

@Route('/routename/:name')

Use HttpMethod define a sub-path

HttpMethod include HttpGet HttpPost HttpPut HttpPatch HttpDelete and HttpAll

Define a sub-path in controller's method

// sub-path is '/'
@HttpGet()
 
// sub-path is '/'
@HttpGet('/')
 
// sub-path is '/action'
@HttpGet('/action')
 
// sub-path is '/action/:id'
@HttpGet('/action/:id')

Define middleware

@Middleware(routeM)

Example

'use strict'
 
const { Controller } = require('egg')
const { Route, HttpGet, Middleware, filters } = require('egg-decorator-router')
const { DefaultFilter } = filters
 
const routeM = (ctx, next) => {
  console.log('passed route middleware')
  next()
}
 
const actionM = i => {
  return (ctx, next) => {
    console.log('passed action middleware ' + i)
    next()
  }
}
 
@Route()
@Middleware(routeM)
class HomeController extends Controller {
  @HttpGet('/') // path: /
  async index() {
    await new Promise(resolve => {
      this.ctx.body = 'ssss'
      resolve()
    })
  }
 
  @HttpGet() // path: /func1
  @Middleware(actionM(2), 2)
  @Middleware(actionM(1), 1)
  func1(ctx) {
    ctx.body = 'hi, func1'
  }
 
  @HttpGet(':id') // path: /:id
  @DefaultFilter('aaa')
  func2(ctx) {
    ctx.body = 'hi, func2' + ctx.params.id
  }
}
 
module.exports = HomeController

License

MIT

Package Sidebar

Install

npm i egg-decorator-router

Weekly Downloads

97

Version

1.0.7

License

MIT

Unpacked Size

17.2 kB

Total Files

11

Last publish

Collaborators

  • fyl080801