koa-map-router

0.0.3 • Public • Published

koa-map-router

A router for koa that's almost too simple.

Install

npm install --save koa-map-router

Usage

var app = require('koa')();
var Router = require('koa-map-router');

var router1 = new Router();
router1.get('/user', [loadUser, showUser]);
router1.put('/user', [loadUser, updateUser]);
router1.del('/user', [loadUser, deleteUser]);
app.use(router1.middleware());

var router2 = new Router();
router2.get('/hello/world', [function*() { this.body = ':)'; }]);
app.use(router2.middleware());

app.listen(3000);

How it works

For fast and simple lookup, routes are stored in a Map of path to a Map of method to a (composed) array of middleware generator functions.

The example in the "Usage" section creates these maps:

var router1 = {
  '/user': {
    'GET': [loadUser, showUser],
    'PUT': [loadUser, updateUser],
    'DELETE': [loadUser, deleteUser]
  }
};

var router2 = {
  '/hello/world': {
    'GET': [function*() { this.body = ':)'; }]
  }
};

The library offers a simple API on top of its underlying maps:

This:

router.get('/user', [loadUser, showUser]);

is sugar for:

router.addRoute('GET', '/user', [loadUser, showUser]);

which is sugar for:

router.routes.get('/user').set('GET', compose([loadUser, showUser]));

When a request comes in, it's pretty much matched like routes[this.path][this.method], though it's not exactly like that. For instance, an incoming HEAD request will match if you have a GET defined for the requested path.

What about wildcard, parameterized, globbing, or regexp routing?

This router does not support the sort of syntax you may be used to like:

router.get('/users/:id', ...)
router.get(/^users\/(\d+)$/, ...)

Instead, you could implement GET /users?id=1 (depend on query-params)

Or you can even pre-generate all of your routes:

var router = new Router();
var users = yield db.findAllUsers();
users.forEach(function(user) {
  router.get('/users/' + user.id, [loadUser, showUser]);
});

The tradeoff is that routing is constant time and the code is dead simple.

Readme

Keywords

Package Sidebar

Install

npm i koa-map-router

Weekly Downloads

2

Version

0.0.3

License

MIT

Last publish

Collaborators

  • danneu