A lean and mean http router for node.js.
It is available through npm:
npm install router
Router does one thing and one thing only - route http requests.
varhttp=require('http');varrouter=require('router');varroute=router();route.get('/',function(req,res){res.writeHead(200);res.end('hello index page');});http.createServer(route).listen(8080);// start the server on port 8080If you want to grab a part of the path you can use capture groups in the pattern:
route.get('/{base}',function(req,res){varbase=req.params.base;// ex: if the path is /foo/bar, then base = foo});The capture patterns matches until the next / or character present after the group
route.get('/{x}x{y}',function(req,res){// if the path was /200x200, then req.params = {x:'200', y:'200'}});Optional patterns are supported by adding a ? at the end
route.get('/{prefix}?/{top}',function(req,res){// matches both '/a/b' and '/b'});If you want to just match everything you can use a wildcard * which works like unix wildcards
route.get('/{prefix}/*',function(req,res){// matches both '/a/', '/a/b', 'a/b/c' and so on.// the value of the wildcard is available through req.params.wildcard});If the standard capture groups aren't expressive enough for you can specify an optional inline regex
route.get('/{digits}([0-9]+)',function(req,res){// matches both '/24' and '/424' but not '/abefest' and so on.});You can also use regular expressions and the related capture groups instead:
route.get(/^\/foo\/(\w+)/,function(req,res){vargroup=req.params[1];// if path is /foo/bar, then group is bar});route.get: MatchGETrequestsroute.post: MatchPOSTrequestsroute.put: MatchPUTrequestsroute.head: MatchHEADrequestsroute.del: MatchDELETErequestsroute.options: MatchOPTIONSrequestsroute.all: Match all above request methods.
By default Router will return 404 if you no route matched. If you want to do your own thing you can give it a callback:
route(req,res,function(){// no route was matchedres.writeHead(404);res.end();});You can also provide a catch-all to a given route that is called if no route was matched:
route.get(function(req,res){// called if no other get route matchedres.writeHead(404);res.end('no GET handler found');});MIT