Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/cupcakearmy/koa-router

Koa Router
https://github.com/cupcakearmy/koa-router

koa koa-middleware path regex router

Last synced: 10 days ago
JSON representation

Koa Router

Awesome Lists containing this project

README

        

# 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
```

### QA

If you have questions:

[![Join the chat at https://gitter.im/cupcakearmy/koa-router](https://badges.gitter.im/cupcakearmy/koa-router.svg)](https://gitter.im/cupcakearmy/koa-router?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

### 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"}
*/
```