webappengine
Version:
A web application server that can host multiple web apps running with Node.js.
164 lines (119 loc) • 6.19 kB
JavaScript
;
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;