UNPKG

webappengine

Version:

A web application server that can host multiple web apps running with Node.js.

164 lines (119 loc) 6.19 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* eslint import/no-dynamic-require: 0 */ var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _express = require('express'); var _express2 = _interopRequireDefault(_express); var _consolidate = require('consolidate'); var _consolidate2 = _interopRequireDefault(_consolidate); var _errorhandler = require('errorhandler'); var _errorhandler2 = _interopRequireDefault(_errorhandler); var _multihost = require('multihost'); var _multihost2 = _interopRequireDefault(_multihost); var _serveStatic = require('serve-static'); var _serveStatic2 = _interopRequireDefault(_serveStatic); var _log = require('./lib/log'); var _log2 = _interopRequireDefault(_log); var _settings = require('./config/settings'); var _settings2 = _interopRequireDefault(_settings); var _errclient = require('./lib/middleware/errclient'); var _errclient2 = _interopRequireDefault(_errclient); var _errlog = require('./lib/middleware/errlog'); var _errlog2 = _interopRequireDefault(_errlog); var _errnotfound = require('./lib/middleware/errnotfound'); var _errnotfound2 = _interopRequireDefault(_errnotfound); var _errserver = require('./lib/middleware/errserver'); var _errserver2 = _interopRequireDefault(_errserver); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var appMain = function appMain() { // Main app var app = (0, _express2.default)(); { // Settings if (_settings2.default.env === 'development') { // Error handler - https://github.com/expressjs/errorhandler // Development error handler, providing stack traces and error message responses // for requests accepting text, html, or json. app.use((0, _errorhandler2.default)()); // a custom "verbose errors" setting which can be used in the templates via settings['verbose errors'] app.enable('verbose errors'); // Enables verbose errors in development app.disable('view cache'); // Disables view template compilation caching in development } else { // a custom "verbose errors" setting which can be used in the templates via settings['verbose errors'] app.disable('verbose errors'); // Disables verbose errors in production app.enable('view cache'); // Enables view template compilation caching in production } app.enable('trust proxy'); // Enables reverse proxy support, disabled by default app.enable('case sensitive routing'); // Enable case sensitivity, disabled by default, treating "/Foo" and "/foo" as the same app.disable('strict routing'); // Enable strict routing, by default "/foo" and "/foo/" are treated the same by the router app.disable('x-powered-by'); // Enables the X-Powered-By: Express HTTP header, enabled by default for (var i = 0; i < _settings2.default.view.engines.length; ++i) { var extension = _settings2.default.view.engines[i].extension; var template = _settings2.default.view.engines[i].template; app.engine(extension, _consolidate2.default[template]); } app.set('view engine', _settings2.default.view.defaultExtension); // The default engine extension to use when omitted app.set('views', _path2.default.join(__dirname, 'views')); // The view directory path _log2.default.debug('app.settings: %j', app.settings); } _settings2.default.routes.forEach(function (options) { if (options.type === 'static') { // Serve static assets app.use(options.route, (0, _serveStatic2.default)(_path2.default.resolve(options.directory))); _log2.default.debug('Served a static directory:', JSON.stringify(options, null, 4)); return; } try { var server = options.server; if (typeof server === 'string') { // Modules are cached after the first time they are loaded. // The cached module must be invalidated to ensure data-independences in a multi-host environment. var serverPath = _path2.default.resolve(options.server); if (require.cache[serverPath]) { delete require.cache[serverPath]; } server = require(serverPath); // Ready for ES6 if ((typeof server === 'undefined' ? 'undefined' : _typeof(server)) === 'object') { server = server.default; } } if (typeof server !== 'function') { _log2.default.error('The multi-host server does not exist:', JSON.stringify(options, null, 4)); return; } app.use((0, _multihost2.default)({ hosts: options.hosts, route: options.route, server: server({ route: options.route }) })); } catch (e) { console.error(e.stack); _log2.default.error('The multi-host server does not exist:', JSON.stringify(options, null, 4)); return; } _log2.default.debug('Attached a multi-host server:', JSON.stringify(options, null, 4)); }); { // Error handling app.use((0, _errlog2.default)()); app.use((0, _errclient2.default)({ error: 'XHR error' })); app.use((0, _errnotfound2.default)({ view: _path2.default.join('common', '404.hogan'), error: 'Not found' })); app.use((0, _errserver2.default)({ view: _path2.default.join('common', '500.hogan'), error: 'Internal server error' })); } return app; }; exports.default = appMain;