Skip to content

Instantly share code, notes, and snippets.

Created April 1, 2015 06:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/b09b0606fce2d279d46d to your computer and use it in GitHub Desktop.
Save anonymous/b09b0606fce2d279d46d to your computer and use it in GitHub Desktop.
var domain = require('domain');
var express = require('express');
var fs = require('fs');
module.exports = function(parent, options){
var directory = options.directory || __dirname + '/../controllers';
fs.readdirSync(directory).forEach(function(name){
var obj = require(directory + '/' + name);
var prefix = obj.prefix || '';
var app = express();
var handler;
var method;
var path;
// generate routes based
// on the exported methods
for (var key in obj) {
var route = key.match(/(GET|POST|PUT|PATCH|DELETE)\s(.*)?/i);
if (route) {
handler = obj[key];
path = prefix + route[2];
method = route[1].toLowerCase();
app[method](path, function (req, res) {
var d = domain.create();
d.add(req);
d.add(res);
d.on('error', function (err) {
try {
res.writeHead(500);
res.end('Error occurred, sorry.');
} catch (er) {
throw(er);
}
});
d.run(function(){
handler.apply(obj, arguments);
});
});
}
}
// mount the app
parent.use(app);
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment