Brig
Brig

Reputation: 10321

Routing Engine for Node.js

I'm getting into Node.JS and would like to have flexibility on the routing engine. I want control over the mapping between urls comming and and what methods get fired.

I'd really like to setup placeholders in the route matching to automatically parse parameters too. Something like

{"routes": [        
    {'route': {'url': '/path/to/resource/[id]'}, "handler": idHandler()},
    {'route': {'url': '/path/to/foo/[category]/bar'}, "handler": fooHandler(),
    {'route': {'url': '/path/to/resource/'}, "handler": defaultHandler()}}
  ]};

Upvotes: 5

Views: 3711

Answers (3)

Scott
Scott

Reputation: 724

Yes, Express will be your best option, I think. No need to "re-invent the wheel" so to speak. You can do RegEx's on routes as well, which gives you a ton of flexibility. I suggest reading up on the guide...it has a lot of good info!

http://expressjs.com/en/guide/routing.html

Upvotes: 2

alessioalex
alessioalex

Reputation: 63653

You can choose a more specific solution (just for routing) like Director, or if you don't want to handle cookies, sessions, redirect functions etc your best option is Express.js or Flatiron (which you can use with Director).

I'll paste the code from the two so you can see how they can help in routing:

Express

app.get('/', function(req, res){
  res.send('index page');
});
app.post('/login', function(req, res) {
  // login logic
});

Director

//
// define a routing table.
//
var router = new director.http.Router({
  '/hello': {
    get: helloWorld
  }
});
//
// You can also do ad-hoc routing, similar to `journey` or `express`.
// This can be done with a string or a regexp.
//
router.get('/bonjour', helloWorld);
router.get(/hola/, helloWorld);

Resources:

http://expressjs.com/en/guide/routing.html
http://blog.nodejitsu.com/scaling-isomorphic-javascript-code
http://blog.nodejitsu.com/introducing-flatiron
http://howtonode.org/express-mongodb

Upvotes: 4

sbstjn
sbstjn

Reputation: 2214

Express.js and Connect have great support for routing, vhosts and a large number of extensions are available out there. For example simple integration of jade template rendering or less stylesheet processing.

Define routes with parameters, regular expressions and different HTTP methods.

app.get('/home', function(req, res) { });
app.post('/save/:contactID', function(req, res) { });
app.all('/params/:required/:andOptional?', function(req, res) { });

See kickstart and kickstart-example for an example of express with enabled jade and less processing.

Upvotes: 0

Related Questions