Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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
Copy link
Author

tj commented Aug 24, 2011

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
Copy link

ded commented Aug 24, 2011

right on

@DarkSmith
Copy link

DarkSmith commented Aug 24, 2011

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

@tj
Copy link
Author

tj commented Aug 24, 2011

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

@rainerborene
Copy link

rainerborene commented Aug 24, 2011

This is really cool.

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