index.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const express = require('express');
  2. const bodyParser = require('body-parser');
  3. const webpack = require('webpack');
  4. const path = require('path');
  5. const getConfig = require('server/config');
  6. const { getLogger } = require('server/modules/logger');
  7. const { getDBConnection } = require('server/modules/db');
  8. const webpackConfig = require('../../webpack.config');
  9. function healthEndpoint(config, db, logger, app) {
  10. app.get('/health', (req, res) => {
  11. res.send('OK');
  12. });
  13. }
  14. function setupDevServer(config, db, logger, app) {
  15. if (!config.__DEV__ || process.env.SKIP_APP === 'true') {
  16. return;
  17. }
  18. const compiler = webpack(webpackConfig);
  19. const serverOptions = {
  20. quiet: true,
  21. publicPath: webpackConfig.output.publicPath,
  22. hot: true
  23. };
  24. // eslint-disable-next-line global-require
  25. app.use(require('webpack-dev-middleware')(compiler, serverOptions));
  26. // eslint-disable-next-line global-require
  27. app.use(require('webpack-hot-middleware')(compiler));
  28. }
  29. function clientRoute(config, db, logger, app) {
  30. app.use(express.static(path.resolve(__dirname, '../../static')));
  31. }
  32. function setupMiddleware(app) {
  33. app.use(bodyParser.json());
  34. }
  35. async function run() {
  36. const config = getConfig();
  37. const logger = getLogger(config);
  38. try {
  39. const db = await getDBConnection(config, logger);
  40. const app = express();
  41. setupMiddleware(app);
  42. healthEndpoint(config, db, logger, app);
  43. setupDevServer(config, db, logger, app);
  44. clientRoute(config, db, logger, app);
  45. const port = process.env.PORT || 3000;
  46. app.listen(port, () => {
  47. logger.info('Listening on port', port);
  48. });
  49. } catch (err) {
  50. logger.error('Error setting up app');
  51. logger.error(err.stack);
  52. }
  53. }
  54. module.exports = {
  55. run
  56. };