Routing decorator for eggjs
npm install --save egg-blueprint
In router.ts
//router.ts
import { Application } from 'egg'
import { Blueprint } from 'egg-blueprint'
export default (app: Application) => {
Blueprint(app)
}
//router.ts
Blueprint(app,{prefix:'/api'})
//controller.ts
export default class index extends Controller {
@bp.get('/user') //===>>/api/user
async get() {
this.ctx.body = 'hello,egg-blueprint'
}
}
//controller.ts
bp.prefix('/prefixtest', 'index')
export default class index extends Controller {
@bp.get('/user') //===>>/prefixtest/user
async get() {
this.ctx.body = 'hello,egg-blueprint'
}
}
NOTICE 1: bp.prefix
is not a decorator function. The first argument is prefix url, the second is ***the class name of this controller.
NOTICE 2: If you have already setup a global prefix option
,controller prefix function will do the next:
//router.ts
Blueprint(app,{prefix:'/api'})
//controller.ts
bp.prefix('/prefixtest', 'index')
export default class index extends Controller {
@bp.get('/user') //===>>/api/prefixtest/user
async get() {
this.ctx.body = 'hello,egg-blueprint'
}
}
import { bp } from 'egg-blueprint'
export default class index extends Controller {
@bp.get('/')
async get() {
this.ctx.body = 'hello,egg-blueprint'
}
@bp.post('/')
async post() {
this.ctx.body = 'hello,post,egg-blueprint'
}
.....
}
@bp.get('/foo/:bar')
async getWithID() {
console.log(this.ctx.params)
this.ctx.body = this.ctx.params['bar']
}
Router middleware will run before the target function.
Example
const Auth = (ctx: Context,ctl: Controller) => {
if (ctx.params['password'] === '1234') return true
ctx.body = 'can not see'
return false
}
// some-controller.ts
export default class TestController extends Controller {
@bp.get('/need/auth/:password', Auth)
async needAuth() {
const { ctx } = this
ctx.body = 'authed'
}
}
- middleware Params:
Ctx:Context
andctl: Controller
, in this case,ctl
isTestController
,not the originalController
- if middleware returns
false
,the target function will not run, onlyfalse
can stop the whole middleware stack. the target function will continue if returnstrue
orundefined
.
import { bp } from 'egg-blueprint'
@bp.restfulClass('blueprint')
export default class Index extends Controller {
async Get() {
this.ctx.body = 'hello,egg-blueprint'
}
async Post() {
this.ctx.body = 'hello,post,egg-blueprint'
}
async Put() {
this.ctx.body = 'hello,egg-blueprint'
}
async Del() {
this.ctx.body = 'hello,egg-blueprint'
}
}
The MIT License (MIT)
Copyright (c) ZhengFang snakegear@163.com