const express = require('express'); const webpack = require('webpack'); const path = require('path'); const getConfig = require('config'); const { getLogger } = require('modules/logger'); const { getDBConnection } = require('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__) { 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'))); } async function run() { const config = getConfig(); const logger = getLogger(config); try { const db = await getDBConnection(config, logger); const app = express(); 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 };