diso.router

Simple router that augments request object with params, using RoutePattern for named param matching.

diso.router

Simple router for client and server, using RoutePattern for named param matching. On server, works with plain node HTTP and as Connect middleware.

6.0.3

npm install --save diso.router

or in package.json

{
  ...
  "dependencies": {
    "diso.router": "~6.0.2"
  }
}
var Router = require('diso.router');
 
// define some routes 
var routes = {
  Show       : 'GET /show/:title',
  CreateShow : 'POST /show',
  OMG        : '/omg/:zomg',
  Derp       : {
    pattern : '/derp/:wow',
    method  : 'GET'
  }
};
 
// Note HTTP verb is optional, and routes can be  
// specified using a string or an object 
 
// create router and add routes 
var router = new Router();
router.addRoutes(routes);
 
// shorter way of doing the same thing 
var router = new Router(routes);
 
// add single routes with .addRoute(<name>, <route>) 
router.addRoute('Home', '/');
 
// register optional 404 handler to deal with urls  
// that don't match any routes 
router.notFound(function (reqres) { 
  res.end("404!");
});
HTTP.createServer(function (reqresnext) {
  router.handle(req, res);
  // assuming request was /show/derp 
  // req.route is now 
  // { 
  //   name   : 'Show', 
  //   params : { 
  //     title : 'derp' 
  //   } 
  // } 
});

or as Connect middleware

Connect().use(router).use(function (reqresnext) {
  // req.route same as above 
});
var route = router.match({
  path : '/derp/4ever'
}); 
// route = { 
//   name   : 'Derp', 
//   params : { 
//     wow: '4ever' 
//   } 
// } 
 
var path = router.match({
  route : {
    name : 'Show',
    params : {
      title : 'barf'
      page  : 10
   }
}}).path();
// path = '/show/barf?page=10' 

MIT

  • instead of iterating over array could use prefix trie like https://github.com/c9s/r3 but prolly not worth the time
  • include post data in route params?
  • rewrite without RoutePattern and ditch query param / hash naming, allow for optional params?
  • docco -o docs source/*.js