const express = require('express'); const bodyParser = require('body-parser'); const webpack = require('webpack'); const path = require('path'); const getConfig = require('server/config'); const { getLogger } = require('server/modules/logger'); const { getDBConnection } = require('server/modules/db'); const webpackConfig = require('../../webpack.config'); function healthEndpoint(config, db, logger, app) { app.get('/health', (req, res) => { res.send('OK'); }); } function setupDevServer(config, db, logger, app) { if (!config.__DEV__ || process.env.SKIP_APP === 'true') { return; } const compiler = webpack(webpackConfig); const serverOptions = { quiet: true, publicPath: webpackConfig.output.publicPath, hot: true }; // eslint-disable-next-line global-require app.use(require('webpack-dev-middleware')(compiler, serverOptions)); // eslint-disable-next-line global-require app.use(require('webpack-hot-middleware')(compiler)); } function clientRoute(config, db, logger, app) { app.use(express.static(path.resolve(__dirname, '../../static'))); } function setupMiddleware(app) { app.use(bodyParser.json()); } async function run() { const config = getConfig(); const logger = getLogger(config); try { const db = await getDBConnection(config, logger); const app = express(); setupMiddleware(app); healthEndpoint(config, db, logger, app); setupDevServer(config, db, logger, app); clientRoute(config, db, logger, app); const port = process.env.PORT || 3000; app.listen(port, () => { logger.info('Listening on port', port); }); } catch (err) { logger.error('Error setting up app'); logger.error(err.stack); } } module.exports = { run };