journey/server/server.js
Linus Miller 6048991b2d new config loading logic
- remove unused config files
- load all server env variables from ./config/env
- still define PWD as midwest seems to be using it
2020-08-28 20:48:22 +02:00

114 lines
2.9 KiB
JavaScript

'use strict'
/*
* The main file that sets up the Express instance and node
*
* @module server/server
* @type {Express instance}
*/
global.PWD = process.env.NODE_PWD || process.cwd()
const config = require('./config')
// modules > native
const p = require('path')
if (config.env.NODE_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(process.cwd(), 'node_modules'))
}
// modules > 3rd party
const _ = require('lodash')
const chalk = require('chalk')
const express = require('express')
// modules > express middlewares
const bodyParser = require('body-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)
})
const prewares = [
express.static(config.dir.static, config.env.NODE_ENV === 'production' ? { maxAge: '1 year' } : null),
bodyParser.json(),
bodyParser.urlencoded({ extended: true }),
]
if (config.env.NODE_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 = function (template) {
const locals = Object.assign({ query: this.req.query }, this.app.locals, this.locals)
this.send(template(locals))
}
try {
server.locals.js = require(p.join(process.cwd(), 'public/js.json'))
} catch (e) {}
try {
server.locals.css = require(p.join(process.cwd(), '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(
config.env.NODE_ENV,
)})`,
)
})
}
module.exports = server