alphascript-server
Version:
CRUD operations for mongo and other functionalities to get started quickly in any CMS project
47 lines (40 loc) • 1.68 kB
JavaScript
var api = require('../../');
module.exports = {
redirectToDriver: function(entity, action) {
return function(req, res, next) {
req.entity = api.entityMap[entity];
req.entityName = entity;
req.entityAction = action;
if (typeof req.entity === 'undefined') return next("entity not in map: " + entity);
if (typeof req.entity.driver === 'undefined') req.entity.driver = "mongo";
var middlewares = typeof req.entity.middleware === 'undefined' ? [] : (req.entity.middleware instanceof Array ? req.entity.middleware : [req.entity.middleware]);
runMiddleware(middlewares, req, res, function(err) {
if (err) return next(err);
switch (req.entity.driver) {
case "sql":
case "mongo":
try {
var route = require('./' + req.entity.driver + '/entity');
if (typeof route[action] !== 'function') return next("entity action not implemented " + action + " for driver " + req.entity.driver);
return route[action](req, res);
} catch (e) {
api.error.log(e);
return next("an error occurred during entity." + action + " for driver: " + req.entity.driver);
}
break;
default:
return next("unknown database driver: " + req.entity.driver);
}
});
};
}
};
function runMiddleware(middlewares, req, res, callback) {
if (middlewares.length === 0) return callback();
var middleware = middlewares[0];
middlewares.splice(0, 1);
middleware(req, res, function(err) {
if (err) return callback(err);
runMiddleware(middlewares, req, res, callback);
});
}