0.0.12 • Published 11 years ago

express-route-dispatcher v0.0.12

Weekly downloads
15
License
MIT
Repository
github
Last release
11 years ago

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');
		});
	});
0.0.12

11 years ago

0.0.11

11 years ago

0.0.10

11 years ago

0.0.9

11 years ago

0.0.8

11 years ago

0.0.7

11 years ago

0.0.6

11 years ago

0.0.4

12 years ago