0.1.1 • Published 6 years ago

@lvchengbin/koa-router v0.1.1

Weekly downloads
80
License
MIT
Repository
github
Last release
6 years ago

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;

0.1.1

6 years ago

0.1.0

6 years ago

0.0.10

6 years ago

0.0.9

7 years ago

0.0.8

7 years ago

0.0.7

7 years ago

0.0.6

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago