koa-router/README.md
2017-08-25 00:31:03 +02:00

170 lines
2.8 KiB
Markdown

# Koa Router
[![npm](https://img.shields.io/npm/v/cca-koa-router.svg)](https://www.npmjs.com/package/cca-koa-router)
[![npm](https://img.shields.io/npm/dt/cca-koa-router.svg)]()
[![npm](https://img.shields.io/npm/l/cca-koa-router.svg)]()
[![Travis](https://img.shields.io/travis/CupCakeArmy/koa-router.svg)]()
Koa Router with support for recursive nesting and regexp and dynamic urls. No dependecies and lightweight code.
### Install
```bash
npm install cca-koa-router --save
```
### Simple Example
```javascript
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
- [Options](#options)
- [Modes](#modes)
- [Nesting](#nesting)
- [Methods](#methods)
- [Parameters](#params)
##### ~ `router(options, builder)`
##### Options:
- `prefix` Prefix for the paths
- `end` If trailing paths sould be counted
- `case` Case sentitive
###### Default
```javascript
{
prefix: '',
end: false,
case: false
}
```
##### Modes:
1. `router(builder)` No options specified, use default
2. `router('string', builder)` String will be taken as the prefix
3. `router({}, builder)` Specify custom options
###### Example
```javascript
// 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
```javascript
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 defined
- `NEST` Used to nest layers of the router
###### Example
```javascript
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
```javascript
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"}
*/
```