Define egg.js router and middleware use decorator.
npm i egg-decorator-router --save
// {app_root}/config/plugin.js
exports.decoratorRouter = {
enable: true,
package: 'egg-decorator-router'
}
基于 typescript 的 eggjs 项目可直接使用装饰器
如果是 js 项目,则需要手动安装babel-plugin-transform-decorators-legacy
和babel-plugin-transform-object-rest-spread
这两个包,并在项目里加入.babelrc
文件
.babelrc 定义如下:
{
"plugins": ["transform-decorators-legacy", "transform-object-rest-spread"]
}
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'
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')
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')
@Middleware(routeM)
'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