UNPKG

silentjs

Version:
108 lines (81 loc) 3.15 kB
// VENDOR LIBS var bodyParser = require('body-parser'); var express = require('express'); var path = require('path'); var lodash = require('lodash'); // FRAMEWORK var configurationService = require('silentjs/configuration'); var ConfigurationStore = require('silentjs/stores/configuration-store'); var MiddlewareStore = require('silentjs/stores/middleware-store'); var ControllerStore = require('silentjs/stores/controller-store'); var appService = require('silentjs/services/app-service'); var middlewareService = require('silentjs/services/middleware-service'); // LIBS CORE var filesystem = require('lib-core/filesystem/filesystem'); var App = function (appId, config) { this.app = express(); appService.addApp(appId, this); this.configuration = new ConfigurationStore(config); this.middlewares = new MiddlewareStore(); this.controllers = new ControllerStore(); this.initialize(); this.start(); }; App.prototype.initialize = function () { this.configuration.initialize(); this.app.use(bodyParser.urlencoded({extended: true})); this.app.use(bodyParser.json()); this.set('jwt', 'nutrizone-server'); this.middlewares.loadMiddlewares(this.configuration.getPath('middlewares')); this.controllers.loadControllers(this.configuration.getPath('controllers')); this.loadRoutes(); }; App.prototype.loadRoutes = function () { var routesPath = path.join( configurationService.get('rootPath'), this.configuration.get('root'), this.configuration.getDirectories().routes ); var routes = filesystem.getFileNamesIntoPath(routesPath); lodash.each(routes, function (routePath) { var route = require(routePath); var middlewares = this.getRouteMiddlewares(route); var controller = this.getRouteController(route); this.app[route.method].apply(this.app, [route.url].concat(middlewares).concat(controller)); }.bind(this)); }; App.prototype.getRouteMiddlewares = function (route) { var preMiddlewares = []; var postMiddlewares = []; var middlewares = lodash.map(route.middlewares, this.getMiddleware.bind(this)); return preMiddlewares.concat(middlewares).concat(postMiddlewares); }; App.prototype.getMiddleware = function (middlewareId) { var middleware = this.middlewares.getMiddleware(middlewareId); if (!middleware) { middleware = middlewareService.getMiddleware(middlewareId); } return middleware; }; App.prototype.getRouteController = function (route) { return this.controllers.getController(route.controller); }; App.prototype.start = function () { this.app.listen(this.configuration.get('app').port); }; App.prototype.set = function (attr, value) { this.app.set(attr, value); }; App.prototype.get = function (attr) { this.app.get(attr); }; App.prototype.use = function (feature) { this.app.use(feature); }; App.prototype.middleware = function (name, func) { this.middlewares.addMiddleware(name, func); }; App.prototype.controller = function (controllerId, func) { this.controllers.addController(controllerId, func); }; module.exports = App;