Trie-routing for Koa

Koa Trie Router

Trie routing for Koa based on routington.

  • OPTIONS support
  • 405 Method Not Allowed support
  • 501 Not Implemented support

Routes are generally orthogonal, so the order of definition generally doesn't matter. See routington for more details.

var app = require('koa')()
.get(function* (next) {
  this.body = 'homepage'
app.post('/images', function* (next) {
  var image = yield* this.request.buffer('25mb')

Checks if the server implements a particular method and throws a 501 error otherwise. This is not middleware, so you would have to use it in your own middleware.

app.use(function* (next) {
  this.request.assertImplementsMethod() // throws otherwise 
  yield next

Like Express, all routes belong to a single middleware. Unlike Express, app.router is not implicitly mounted. If you do not do app.use(app.router) ever, routing will never work.

paths can be a nested stack of string paths:

app.route('/one', [
  ['/three', '/four']

You can then chain [method](middleware...) calls.

.get(function* (next) {
.post(function* (next) {
.patch(function* (next) {

Similar to above, but you define paths as the first argument:

], function* (next) {

this.params will be defined with any matched parameters.

app.get('/user/:name', function* (next) {
  var name = this.params.name
  var user = yield User.get(name)
  yield next

The middleware throws an error with code MALFORMEDURL when it encounters a malformed path. An application can try/catch this upstream, identify the error by its code, and handle it however the developer chooses in the context of the application- for example, re-throw as a 404.

For path definitions, see routington.

In trie-router, routes are orthogonal and strict. Unlike regexp routing, there's no wildcard routing and you can't next to the next matching route.