express-route-dispatcher
v0.0.12
Published
Route dispatcher for Express
Downloads
12
Maintainers
Readme
express-route-dispatcher
Micro routing framework on top of the Express framework.
[2014-01-28] Now with generators/yield support
What does it do?
ERD provides a way of decoupling your route definition and the actual implementation by following a convention based approach. Furthermore it allows you to add "before" hooks to your route processing.
The routes are mapped to controllers/actions (files/methods).
See the examples for live action.
Install
$ npm install express express-route-dispatcher
Examples 1: basic routing
ERD assumes some defaults when not explicitely configured. For example it expects the controllers to be in a directory called "./controllers".
Example directory layout ./server.js ./controllers/basic.js ./controllers/auth.js
./server.js
var express = require('express');
var dispatcher = require('express-route-dispatcher');
var app = express();
// create the routes
dispatcher.map(function() {
// route, controller, method
this.get ('/basic/hello', 'basic', 'hello');
this.post('/basic/concat/:a/:b', 'basic', 'concat');
this.get ('/version', 'basic', 'version');
});
// apply the routing configuration
dispatcher.finish(app);
./controllers/basic.js
module.exports = {
beforeEach : function(req, res, next) {
if(doSomeImportantCheck()) return next();
res.send('Important check failed');
}
hello : function(req, res) {
res.send('Hello my friend');
},
concat : function(req, res) {
res.send(req.params.a + req.params.b);
},
version: function*(req, res) {
try {
var data = yield somePromise();
var version = yield anotherPromise(data);
res.send(version);
}
catch(err) {
res.send(500, 'Something went wrong while getting the version!');
}
}
}
Example 2: with options
ERD supports two options
- path (where to find the controllers)
- parseControllerName (allows you to adjust the lookup algorithm)
Example directory layout ./server.js ./api/basicController.js
./server.js
// ...
dispatcher.configure({
path: 'api',
parseControllerName: function(name) {
return name.toLowerCase() + 'Controller';
}
});
dispatcher.map(function() {
this.get('/basic/hello', 'basic', 'hello');
});
dispatcher.finish(app);
Example 3: nested routing
ERD supports nested routing which might be useful for authentication checks and alike. All handlers inside the new map() will run through the before check first.
./server.js
// ...
dispatcher.map(function() {
this.get('/version', 'basic', 'version');
this.get('/auth/login', 'auth', 'login');
this.before(function(req, res, next) {
if (numberCrunch.wobble(req) > 18) {
return res.send("no can do sir");
}
return next();
}).map(function() {
this.get('/auth/logout', 'auth', 'logout');
this.get('/word/domination/plan', 'internal', 'plan');
});
});