bagpipes
Version:
Less code, more flow. Let's dance!
43 lines (34 loc) • 1.35 kB
JavaScript
;
var debug = require('debug')('pipes:fittings');
var path = require('path');
var _ = require('lodash');
var assert = require('assert');
var util = require('util');
module.exports = function createFitting(pipes, fittingDef) {
assert(fittingDef.module, util.format('module is required on fitting: %j', fittingDef));
assert(fittingDef.function, util.format('function is required on fitting: %j', fittingDef));
for (var i = 0; i < pipes.config.connectMiddlewareDirs.length; i++) {
var dir = pipes.config.connectMiddlewareDirs[i];
try {
var modulePath = path.resolve(dir, fittingDef.module);
var controller = require(modulePath);
var fn = controller[fittingDef['function']];
if (fn) {
debug('using %s controller in %s', fittingDef.module, dir);
return connectCaller(fn);
} else {
debug('missing function %s on controller %s in %s', fittingDef['function'], fittingDef.module, dir);
}
} catch (err) {
debug('no controller %s in %s', fittingDef.module, dir);
}
}
throw new Error('controller not found in %s for fitting %j', pipes.config.connectMiddlewareDirs, fittingDef);
};
function connectCaller(fn) {
return function connect_middleware(context, next) {
fn(context.request, context.response, function(err) {
next(err);
});
}
}