# 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 [![NPM version](http://img.shields.io/npm/v/koa-router.svg?style=flat)](https://npmjs.org/package/koa-router) [![NPM Downloads](https://img.shields.io/npm/dm/koa-router.svg?style=flat)](https://npmjs.org/package/koa-router) [![Node.js Version](https://img.shields.io/node/v/koa-router.svg?style=flat)](http://nodejs.org/download/) [![Build Status](http://img.shields.io/travis/alexmingoia/koa-router.svg?style=flat)](http://travis-ci.org/alexmingoia/koa-router) [![Tips](https://img.shields.io/gratipay/alexmingoia.svg?style=flat)](https://www.gratipay.com/alexmingoia/) [![Gitter Chat](https://img.shields.io/badge/gitter-join%20chat-1dce73.svg?style=flat)](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).