index.js 1.6 KB

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