journey/server/server.js
2017-02-23 19:29:58 +01:00

118 lines
3.1 KiB
JavaScript

'use strict';
/*
* The main file that sets up the Express instance and node
*
* @module server/server
* @type {Express instance}
*/
global.ENV = process.env.NODE_ENV || 'development';
global.PWD = process.env.NODE_PWD || process.cwd();
// modules > native
const p = require('path');
if (ENV === 'development') {
// output filename in console log and colour console.dir
require('midwest/util/console');
// needed so symlinked modules get access to main projects node_modules/
require('app-module-path').addPath(p.join(PWD, 'node_modules'));
}
// modules > 3rd party
const _ = require('lodash');
const chalk = require('chalk');
const express = require('express');
// const passport = require('passport');
const requireDir = require('require-dir');
// modules > express middlewares
const bodyParser = require('body-parser');
// const session = require('express-session');
// const cookieParser = require('cookie-parser');
// modules > midwest
const colorizeStack = require('midwest/util/colorize-stack');
// make error output stack pretty
process.on('uncaughtException', (err) => {
console.error(chalk.red('UNCAUGHT EXCEPTION'));
if (err.stack) {
console.error(colorizeStack(err.stack));
} else {
console.error(err);
}
process.exit(1);
});
// midwest modules and services configuration
require('./midwest');
const config = requireDir('./config', { camelcase: true });
const prewares = [
express.static(config.dir.static, ENV === 'production' ? { maxAge: '1 year' } : null),
bodyParser.json(),
bodyParser.urlencoded({ extended: true }),
// cookieParser(),
// session(config.session),
// passport.initialize(),
// passport.session(),
];
if (ENV === 'development') {
// only log requests to console in development mode
prewares.unshift(require('morgan')('dev'));
// prewares.push(require('midwest-module-membership/passport/automatic-login'));
}
const postwares = [
require('midwest/middleware/ensure-found'),
// transform and log error
require('midwest/factories/error-handler')(config.errorHandler),
// respond
require('midwest/middleware/responder'),
];
const server = express();
// get IP & whatnot from nginx proxy
server.set('trust proxy', true);
_.extend(server.locals, {
site: require('./config/site'),
});
// override default response render method for
// more convenient use with marko
server.response.render = require('./render');
try {
server.locals.js = require(p.join(PWD, 'public/js.json'));
} catch (e) {}
try {
server.locals.css = require(p.join(PWD, 'public/css.json'));
} catch (e) {}
// load prewares
server.use(...prewares);
// mount routers
server.use(require('./routers/index'));
server.use('/api', require('./routers/api'));
// server.use('/auth', require('midwest-module-membership/passport/router'));
// load postwares
server.use(...postwares);
// Only start Express server when it is the main module (ie not required by test)
if (require.main === module) {
server.http = server.listen(config.port, () => {
console.info(`[${chalk.cyan('INIT')}] HTTP Server listening on port ${chalk.magenta(config.port)} (${chalk.yellow(ENV)})`);
});
}
module.exports = server;