Skip to content

Instantly share code, notes, and snippets.

@tj
Created August 24, 2011 00:21
Show Gist options
  • Select an option

  • Save tj/1166989 to your computer and use it in GitHub Desktop.

Select an option

Save tj/1166989 to your computer and use it in GitHub Desktop.
example of backbone-style routing with Express
app.get('/help', function(req, res){
res.send('some help');
});
app.get('/search/:query/p:page', function(req, res){
var query = req.params.query
, page = req.params.page;
res.send('search "' + query + '", page ' + (page || 1));
});
function Router(obj) {
this.methods = obj;
this.route(obj.routes);
}
Router.prototype.route = function(obj){
var self = this
, routes = Object.keys(obj);
Object.keys(obj).forEach(function(route){
var parts = route.split(' ')
, method = parts.shift().toLowerCase()
, path = parts.shift()
, fn = self.methods[obj[route]];
app[method]('/' + path, function(req, res, next){
var args = req.route.keys.map(function(key){
return req.params[key.name];
});
fn.apply(res, args);
});
});
};
Router.extend = function(obj){
return new Router(obj);
};
// GET /help
// GET /search/foobar
// GET /search/foobar/p2
var router = Router.extend({
routes: {
'GET help': 'help'
, 'GET search/:query': 'search'
, 'GET search/:query/p:page': 'search'
},
help: function(){
this.send('some help');
},
search: function(query, page){
this.send('search "' + query + '", page ' + (page || 1));
}
});
@tj

tj commented Aug 24, 2011

Copy link
Copy Markdown
Author

this is a really quick mockup of how you could utilize higher level routing, since sometimes people seem to forget that you can build on basic routes, while of course still retaining the lower level flexibility app.get() etc

@ded

ded commented Aug 24, 2011

Copy link
Copy Markdown

right on

@DarkSmith

Copy link
Copy Markdown

Is this going to be included in express on in a separate module ?

@tj

tj commented Aug 24, 2011

Copy link
Copy Markdown
Author

@DarkSmith didn't plan on either but it could easily be an extension like express-resource

@rainerborene

Copy link
Copy Markdown

This is really cool.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment