Routing decorator for eggjs
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'
}
}
Ctx:Context
and ctl: Controller
, in this case, ctl
is TestController
,not the original Controller
false
,the target function will not run, only false
can stop the whole middleware stack. the target function will continue if returns true
or undefined
.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 [email protected]