UNPKG

generator-neonode

Version:

Yeoman generator to scaffold a Neonode Fullstack MVC Application

80 lines (59 loc) 2.23 kB
var _ = require('lodash'); _.mixin(require('lodash-inflection')); var routeMapper = CONFIG.router; var router = global.neonode.express.Router(); logger.info('Loading routes...'); logger.info('Routes'); var _helpers = []; routeMapper.routes.forEach(function(route) { // save named callback _helpers.push(route.as); // append given Foo#bar if (route.to) { route.handler.push(route.to); } var _handler = route.handler.join('.').split('#'); var controller = _handler[0]; var action = _handler[1] || route.action; var verbs = [route.verb]; verbs.forEach(function(verb) { logger.info((verb.toUpperCase() + ' ').substr(0, 7) + ' ' + route.path + ' ' + controller + '#' + action); var controllerMethod = neonode.controllers[controller][action]; var beforeActions = neonode.controllers[controller].constructor.beforeActions; var args = []; /* Get the beforeActions from the controller and filter the ones that match the current route.action and flatten the result*/ if (beforeActions.length > 0) { var filters = _.flatten(beforeActions.filter(function(item) { if (item.actions.indexOf(action) !== -1) { return true; } }).map(function(item) { return item.before; })); filters.forEach(function(filter) { if (_.isString(filter)) { // if is string look for the method in the same controller if (neonode.controllers[controller][filter]) { args.push(neonode.controllers[controller][filter]); } else { throw new Error('BeforeActions Error: Unknown method ' + filter + ' in ' + controller); } } else if (_.isFunction(filter)) { // if is a function just add it to the middleware stack args.push(filter); } else { throw new Error('Invalid BeforeAction ' + filter); } }); } args.push(controllerMethod); router.route(route.path)[verb](args); }); }); logger.info("---------------------------------"); logger.info('\n'); logger.info('Route Helpers:'); _helpers.forEach(function(fn) { logger.info(' ' + fn + '.url()'); }); logger.info('\n'); module.exports = router;