https://github.com/lvchengbin/koa-router
A router middleware for Koajs.
https://github.com/lvchengbin/koa-router
koa koa-router middleware router
Last synced: 9 months ago
JSON representation
A router middleware for Koajs.
- Host: GitHub
- URL: https://github.com/lvchengbin/koa-router
- Owner: LvChengbin
- License: mit
- Created: 2018-01-16T17:58:18.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-01-09T16:54:19.000Z (over 7 years ago)
- Last Synced: 2025-09-17T18:41:28.087Z (9 months ago)
- Topics: koa, koa-router, middleware, router
- Language: JavaScript
- Size: 92.8 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# koa-router
A simple routing middleware for koa which can match path string, and queries.
## Installation
```js
$ npm i @lvchengbin/koa-router --save
```
## Usage
A simple example:
```js
const Koa = require( 'koa' );
const Router = require( '@lvchengbin/koa-router' );
const app = new Koa();
const router = new Router( app );
router.get( '/user', async ctx => {
ctx.body = 'User';
} );
router.get( '/user/:id', async ( ctx, next, id ) => {
ctx.body = 'User: ' + id;
} );
router.post( '/add', async ctx => {
ctx.body = 'Add data';
} );
app.listen( 3000 );
```
You can also use `RegExp` for the router:
```js
const Koa = require( 'koa' );
const Router = require( '@lvchengbin/koa-router' );
const app = new Koa();
const router = new Router( app );
router.get( /^\/user\/(\d+)/, async ( ctx, next, id ) => {
ctx.body = id;
} );
app.listen( 3000 );
```
You can also try matching queries in query string:
```js
const Koa = require( 'koa' );
const Router = require( '@lvchengbin/koa-router' );
const app = new Koa();
const router = new Router( app );
// match all requests with a query responseType and it's value should be jsonp
router.get( { responseType : 'jsonp' } , async ( ctx, next ) => {
ctx.body = id;
} );
// match all id start with 1
router.get( { id : /^1(\d+)/ }, async ctx => {
} );
app.listen( 3000 );
```
If you want to add a route for multiple types of methods, you can use `router.any` method, for example:
```js
const app = new Koa();
const router = new Router( app );
router.any( [ 'get', 'post' ], '/api', async ctx => {
ctx.body = 'Method: ' + ctx.method;
} );
```
Using asterisk (*) as the first argument of `router.any` would match all methods:
```js
router.any( '*', '/api', async ctx => {
ctx.body = 'This would be execute with all methods';
} );
```
Multiple `path`s can be set as an `Array` or a `Generator` in one rule:
```js
// using an array
router.get( [ '/path/a', '/path/b' ], async ( ctx, next ) => {
} );
// using a generator
router.get( function*() {
yield '/path/a';
yield '/path/b';
}, async ( ctx, next ) => {
} );
```
In default situation, if you pass the instance of `Koa` to the constructor of `koa-router`, `app.use` would be called automatically. Therefore, if you don't want to execute `app.use` automatically, you don't need to pass the `Koa` instance to the constructor of `koa-router`. Then, you can also call `app.use` later.
```js
const app = new Koa();
const router = new Router();
app.use( router.get( '/user', async ctx => {
ctx.body = 'User';
} ) );
```
To execute multiple middlewares with a routing rule.
```js
const app = new Koa();
const router = new Router( app );
router.get( '/', [
( ctx, next ) => {
next();
},
ctx => {
ctx.body = 'Hello world!';
}
] );
```
Route paths would be parsed by [path-to-regexp](https://github.com/pillarjs/path-to-regexp);