@lvchengbin/koa-router

Koa router middleware

Stats

StarsIssuesVersionUpdatedCreatedSize
@lvchengbin/koa-router
400.1.13 years ago4 years agoMinified + gzip package size for @lvchengbin/koa-router in KB

Readme

koa-router

A simple routing middleware for koa which can match path string, and queries.

Installation

$ npm i @lvchengbin/koa-router --save

Usage

A simple example:

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:

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:

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:

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:

router.any( '*', '/api', async ctx => {
    ctx.body = 'This would be execute with all methods';
} );

Multiple paths can be set as an Array or a Generator in one rule:

// 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.

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.

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;

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.