# koa-router
**Repository Path**: mirrors_bitinn/koa-router
## Basic Information
- **Project Name**: koa-router
- **Description**: Router middleware for koa.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-24
- **Last Updated**: 2026-01-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# koa-router
[](https://npmjs.org/package/koa-router) [](https://npmjs.org/package/koa-router) [](http://nodejs.org/download/) [](http://travis-ci.org/alexmingoia/koa-router) [](https://www.gratipay.com/alexmingoia/) [](https://gitter.im/alexmingoia/koa-router/)
> Router middleware for [koa](https://github.com/koajs/koa)
* Express-style routing using `app.get`, `app.put`, `app.post`, etc.
* Named URL parameters.
* Named routes with URL generation.
* Responds to `OPTIONS` requests with allowed methods.
* Support for `405 Method Not Allowed` and `501 Not Implemented`.
* Multiple route middleware.
* Multiple routers.
* Nestable routers.
## Installation
Install using [npm](https://www.npmjs.org/):
```sh
npm install koa-router
```
## API Reference
* [koa-router](#module_koa-router)
* [Router](#exp_module_koa-router--Router) ⏏
* [new Router([opts])](#new_module_koa-router--Router_new)
* _instance_
* [.get|put|post|patch|delete](#module_koa-router--Router+get|put|post|patch|delete) ⇒ Router
* [.routes](#module_koa-router--Router+routes) ⇒ function
* [.use([path], middleware, [...])](#module_koa-router--Router+use) ⇒ Router
* [.prefix(prefix)](#module_koa-router--Router+prefix) ⇒ Router
* [.allowedMethods([options])](#module_koa-router--Router+allowedMethods) ⇒ function
* [.redirect(source, destination, code)](#module_koa-router--Router+redirect) ⇒ Router
* [.route(name)](#module_koa-router--Router+route) ⇒ Layer | false
* [.url(name, params)](#module_koa-router--Router+url) ⇒ String | Error
* [.param(param, middleware)](#module_koa-router--Router+param) ⇒ Router
* _static_
* [.url(path, params)](#module_koa-router--Router.url) ⇒ String
### Router ⏏
**Kind**: Exported class
#### new Router([opts])
Create a new router.
| Param | Type | Description |
| --- | --- | --- |
| [opts] | Object | |
| [opts.prefix] | String | prefix router paths |
**Example**
Basic usage:
```javascript
var app = require('koa')();
var router = require('koa-router')();
router.get('/', function *(next) {...});
app
.use(router.routes())
.use(router.allowedMethods());
```
#### router.get|put|post|patch|delete ⇒ Router
Create `router.verb()` methods, where *verb* is one of the HTTP verbes such
as `router.get()` or `router.post()`.
Match URL patterns to callback functions or controller actions using `router.verb()`,
where **verb** is one of the HTTP verbs such as `router.get()` or `router.post()`.
```javascript
router
.get('/', function *(next) {
this.body = 'Hello World!';
})
.post('/users', function *(next) {
// ...
})
.put('/users/:id', function *(next) {
// ...
})
.del('/users/:id', function *(next) {
// ...
});
```
Route paths will be translated to regular expressions used to match requests.
Query strings will not be considered when matching requests.
#### Named routes
Routes can optionally have names. This allows generation of URLs and easy
renaming of URLs during development.
```javascript
router.get('user', '/users/:id', function *(next) {
// ...
});
router.url('user', 3);
// => "/users/3"
```
#### Multiple middleware
Multiple middleware may be given and are composed using
[koa-compose](https://github.com/koajs/koa-compose):
```javascript
router.get(
'/users/:id',
function *(next) {
this.user = yield User.findOne(this.params.id);
yield next;
},
function *(next) {
console.log(this.user);
// => { id: 17, name: "Alex" }
}
);
```
### Nested routers
Nesting routers is supported:
```javascript
var forums = new Router();
var posts = new Router();
posts.get('/', function *(next) {...});
posts.get('/:pid', function *(next) {...});
forums.get('/forums/:fid/posts', posts.routes());
// responds to "/forums/123/posts" and "/forums/123/posts/123"
app.use(forums.routes());
```
#### Router prefixes
Route paths can be prefixed at the router level:
```javascript
var router = new Router({
prefix: '/users'
});
router.get('/', ...); // responds to "/users"
router.get('/:id', ...); // responds to "/users/:id"
```
#### URL parameters
Named route parameters are captured and added to `ctx.params`.
##### Named parameters
```javascript
router.get('/:category/:title', function *(next) {
console.log(this.params);
// => [ category: 'programming', title: 'how-to-node' ]
});
```
##### Parameter middleware
Run middleware for named route parameters. Useful for auto-loading or
validation.
```javascript
router
.param('user', function *(id, next) {
this.user = users[id];
if (!this.user) return this.status = 404;
yield next;
})
.get('/users/:user', function *(next) {
this.body = this.user;
})
.get('/users/:userId/friends', function *(next) {
this.body = yield this.user.getFriends();
})
// /users/3 => {"id": 3, "name": "Alex"}
// /users/3/friends => [{"id": 4, "name": "TJ"}]
```
**Kind**: instance property of [Router](#exp_module_koa-router--Router)
| Param | Type | Description |
| --- | --- | --- |
| path | String | |
| [middleware] | function | route middleware(s) |
| callback | function | route callback |
#### router.routes ⇒ function
Returns router middleware which dispatches a route matching the request.
**Kind**: instance property of [Router](#exp_module_koa-router--Router)
#### router.use([path], middleware, [...]) ⇒ Router
Use given middleware(s) before route callback.
Only runs if any route is matched. If a path is given, the middleware will
run for any routes that include that path.
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type |
| --- | --- |
| [path] | String |
| middleware | function |
| [...] | function |
**Example**
```javascript
router.use(session(), authorize());
// use middleware only with given path
router.use('/users', userAuth());
app.use(router.routes());
```
#### router.prefix(prefix) ⇒ Router
Set the path prefix for a Router instance that was already initialized.
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type |
| --- | --- |
| prefix | String |
**Example**
```javascript
router.prefix('/things/:thing_id')
```
#### router.allowedMethods([options]) ⇒ function
Returns separate middleware for responding to `OPTIONS` requests with
an `Allow` header containing the allowed methods, as well as responding
with `405 Method Not Allowed` and `501 Not Implemented` as appropriate.
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type | Description |
| --- | --- | --- |
| [options] | Object | |
| [options.throw] | Boolean | throw error instead of setting status and header |
**Example**
```javascript
var app = koa();
var router = router();
app.use(router.routes());
app.use(router.allowedMethods());
```
#### router.redirect(source, destination, code) ⇒ Router
Redirect `source` to `destination` URL with optional 30x status `code`.
Both `source` and `destination` can be route names.
```javascript
router.redirect('/login', 'sign-in');
```
This is equivalent to:
```javascript
router.all('/login', function *() {
this.redirect('/sign-in');
this.status = 301;
});
```
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type | Description |
| --- | --- | --- |
| source | String | URL or route name. |
| destination | String | URL or route name. |
| code | Number | HTTP status code (default: 301). |
#### router.route(name) ⇒ Layer | false
Lookup route with given `name`.
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type |
| --- | --- |
| name | String |
#### router.url(name, params) ⇒ String | Error
Generate URL for route. Takes either map of named `params` or series of
arguments (for regular expression routes).
```javascript
router.get('user', '/users/:id', function *(next) {
// ...
});
router.url('user', 3);
// => "/users/3"
router.url('user', { id: 3 });
// => "/users/3"
```
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type | Description |
| --- | --- | --- |
| name | String | route name |
| params | Object | url parameters |
#### router.param(param, middleware) ⇒ Router
Run middleware for named route parameters. Useful for auto-loading or
validation.
**Kind**: instance method of [Router](#exp_module_koa-router--Router)
| Param | Type |
| --- | --- |
| param | String |
| middleware | function |
**Example**
```javascript
router
.param('user', function *(id, next) {
this.user = users[id];
if (!this.user) return this.status = 404;
yield next;
})
.get('/users/:user', function *(next) {
this.body = this.user;
})
.get('/users/:userId/friends', function *(next) {
this.body = yield this.user.getFriends();
})
// /users/3 => {"id": 3, "name": "Alex"}
// /users/3/friends => [{"id": 4, "name": "TJ"}]
```
#### Router.url(path, params) ⇒ String
Generate URL from url pattern and given `params`.
**Kind**: static method of [Router](#exp_module_koa-router--Router)
| Param | Type | Description |
| --- | --- | --- |
| path | String | url pattern |
| params | Object | url parameters |
**Example**
```javascript
var url = Router.url('/users/:id', {id: 1});
// => "/users/1"
```
## Contributing
Please submit all issues and pull requests to the [alexmingoia/koa-router](http://github.com/alexmingoia/koa-router) repository!
## Tests
Run tests using `npm test`.
## Support
If you have any problem or suggestion please open an issue [here](https://github.com/alexmingoia/koa-router/issues).