koa-trie-router

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')()
app.use(require('koa-trie-router')(app))
 
app.route('/')
.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(myCustomErrorHandler)
 
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', [
  '/two',
  ['/three', '/four']
])

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

app.route('/')
.get(function* (next) {
 
})
.post(function* (next) {
 
})
.patch(function* (next) {
 
})

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

app.get([
  '/one',
  '/two'
], 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
})

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.