cca-koa-router
v0.1.7
Published
Koa Router
Downloads
43
Maintainers
Readme
Koa Router
Koa Router with support for recursive nesting and regexp and dynamic urls. No dependecies and lightweight code.
Install
npm install cca-koa-router --saveSimple Example
const
Koa = require('koa'),
router = require('cca-koa-router')
const
app = new Koa(),
port = 3000
app.use(router(_ => {
_.get('/user/:user', (c, n) => {
c.body = c.request.params['user']
// GET /user/foo => 'foo'
})
}))
app.listen(port)Documentation
~ router(options, builder)
Options:
prefixPrefix for the pathsendIf trailing paths sould be countedcaseCase sentitive
Default
{
prefix: '',
end: false,
case: false
}Modes:
router(builder)No options specified, use defaultrouter('string', builder)String will be taken as the prefixrouter({}, builder)Specify custom options
Example
// 1
app.use(router(_ => {
_.get('/mypath', (c, n) => {
// GET /mypath
c.body = 'Some Response'
})
}))
// 2
app.use(router('/myprefix', _ => {
_.get('/mypath', (c, n) => {
// GET /myprefix/mypath
c.body = 'Some Response'
})
}))
// 3
app.use(router({
prefix: '/myprefix',
case: true
}, _ => {
_.get('/myPath', (c, n) => {
// GET /myprefix/myPath
c.body = 'Some Response'
})
}))Nesting
You can nest recursively routers. Each can have its own options.
Example
app.use(router(_ => {
_.nest(router('/user', _ => {
_.get('/view', (c, n) => {
c.body = 'View User'
})
_.get('/edit', (c, n) => {
c.body = 'Edit User'
})
}))
_.get('/', c => {
c.body = 'Root'
})
}))
/*
GET / => 'Root'
GET /user/view => 'View User'
GET /user/edit => 'Edit User'
*/Methods
Supported methods:
GETPOSTPUTPATCHDELETE
Special "methods":
ALLUsed if none other method is definedNESTUsed to nest layers of the router
Example
app.use(router(_ => {
_.get('/path', c => {
c.body = 'GET'
})
_.post('/path', c => {
c.body = 'POST'
})
// ...
_.delete('/path', c => {
c.body = 'DELETE'
})
}))Params
The router suppors parametrs in the url/path. Parameters will be stored in the ctx.request.params object
Example
app.use(router(_ => {
_.get('/user/:user/:id/view/:type', (c, n) => {
c.body = c.request.params
})
}))
/*
GET /user/foo/123/view/active
=>
{"user":"foo","id":"123","type":"active"}
*/