mirror of
https://github.com/cupcakearmy/koa-router.git
synced 2024-12-22 08:06:27 +00:00
Koa Router
LICENSE | ||
package.json | ||
README.md | ||
Router.js |
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"}
*/