cca-koa-router
v0.1.7
Published
Koa Router
Downloads
10
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 --save
Simple 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:
prefix
Prefix for the pathsend
If trailing paths sould be countedcase
Case 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:
GET
POST
PUT
PATCH
DELETE
Special "methods":
ALL
Used if none other method is definedNEST
Used 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"}
*/