Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Trie-routing for Koa
JavaScript
branch: master
Failed to load latest commit information.
lib use assertion for better code coverage
test fix #16
.gitignore add coverage and shizz
.travis.yml add coverage and shizz
HISTORY.md 1.0.6
LICENSE cleanup and bump deps
README.md add coverage and shizz
package.json 1.0.10

README.md

Koa Trie Router

NPM version build status Test coverage Gittip

Trie routing for Koa based on routington.

Features

  • 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.

Installation

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')
})

API

this.assertImplementsMethod()

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
})

app.use(app.router)

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.

app.route(paths)[method](middleware...)

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) {

})

app[method](paths, middleware...)

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

app.get([
  '/one',
  '/two'
], function* (next) {

})

this.params

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
})

Path Definitions

For path definitions, see routington.

Usage

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.

Something went wrong with that request. Please try again.