node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org »



Build Status

Dead-simple routing for node.


var http = require('http'),
    Router = require('route-emitter').Router,
    router = new Router()
router.listen('get', '/', function (req, res) {
  res.end('Hello, world')
// listen for any http verb! 
router.listen('post', '/blog', function (req, res) {
  res.end('BLOG CREATED!')
// or you can catch 404s 
router.listen('*', '*', function (req, res) {
  res.end('PAGE NOT FOUND!')
// ...or verb-specific 404s 
router.listen('put', '*', function (req, res) {
  res.end('RESOURCE NOT FOUND!')
// create a listener with named emitter! 
router.listen('delete', '/blog', 'deleteThatBlog')
// react to the emit! 
router.on('deleteThatBlog', function (req, res) {
  res.end('BLOG DELETED')
// catch named parameters! 
router.listen('get', '/blog/{{ id }}', function (req, res, params) {
// catch splats! 
router.listen('delete', '/*', function (req, res, params) {
  res.end(params._splat[0]) // || res.end(params._1) 
// or roll your own regexp! 
router.listen('patch', /my\/(.*)/, function (req, res, params) {
  res.end(params._captured[0]) // || res.end(params.$1) 

other info

order of operations

  • (verb)/path literal, if found
  • (verb)/path params || splat || regexp if found
  • (verb)/* if found
  • */path literal, if found
  • */path params || splat || regexp if found
  • */*
  • at this point, route-emitter does a last-ditch effort to find a handler and emits an event named (verb):(path). if no listeners are attached to that specific event, it logs an unmatched route to process.stdout

params values

  • params._splat array of splat results
  • params._1 - params._x 1-x splat results
  • params._captured array of captured results from custom RegExp
  • params.$1 - $params.$x 1-x captured results