silentjs
Version:
NodeJS API Framework
108 lines (81 loc) • 3.15 kB
JavaScript
// 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;