# koa-map-router

> a [too] simple router for koa

Latest version **0.0.3** (published 2015-05-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install koa-map-router
pnpm add koa-map-router
yarn add koa-map-router
bun add koa-map-router
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2015-05-05 |
| First published | 2015-05-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Known vulnerabilities | 0 (+3 in 1 direct dependencies) |
| Install scripts | no |
| Author | Dan Neumann |
| Maintainers | danneu |
| Keywords | koa, router |

## Links

- npm: https://www.npmjs.com/package/koa-map-router
- Repository: https://github.com/danneu/koa-map-router
- Issues: https://github.com/danneu/koa-map-router/issues
- npm.io page: https://npm.io/package/koa-map-router

## Dependencies (5)

- [koa](https://npm.io/package/koa.md) ^0.20.0
- [debug](https://npm.io/package/debug.md) ^2.1.3
- [methods](https://npm.io/package/methods.md) ^1.1.1
- [koa-compose](https://npm.io/package/koa-compose.md) ^2.3.0
- [better-assert](https://npm.io/package/better-assert.md) ^1.0.2

## Alternatives

- [express-promise-router](https://npm.io/package/express-promise-router.md) — 736.1K weekly downloads
- [next-usequerystate](https://npm.io/package/next-usequerystate.md) — 29.8K weekly downloads
- [@bitkyc08/opencodex](https://npm.io/package/@bitkyc08/opencodex.md) — 4.6K weekly downloads
- [lynkr](https://npm.io/package/lynkr.md) — 575 weekly downloads
- [baremetal.js](https://npm.io/package/baremetal.js.md) — 42 weekly downloads

## Recent versions

- 0.0.3 (latest) — 2015-05-05
- 0.0.2 — 2015-05-05
- 0.0.1 — 2015-05-05

## README

# 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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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.

---
_Source: https://npm.io/package/koa-map-router · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
