index.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. const express = require('express');
  2. require('express-async-errors');
  3. const bodyParser = require('body-parser');
  4. const basicAuth = require('express-basic-auth');
  5. const webpack = require('webpack');
  6. const path = require('path');
  7. const getConfig = require('server/config');
  8. const { getLogger } = require('server/modules/logger');
  9. const { getDBConnection } = require('server/modules/db');
  10. const { apiRoutes } = require('server/routes');
  11. const webpackConfig = require('../../webpack.config');
  12. function setupDevServer(config, db, logger, app) {
  13. if (!config.__DEV__ || process.env.SKIP_APP === 'true') {
  14. return;
  15. }
  16. const compiler = webpack(webpackConfig);
  17. const serverOptions = {
  18. quiet: true,
  19. publicPath: webpackConfig.output.publicPath,
  20. hot: true
  21. };
  22. // eslint-disable-next-line global-require
  23. app.use(require('webpack-dev-middleware')(compiler, serverOptions));
  24. // eslint-disable-next-line global-require
  25. app.use(require('webpack-hot-middleware')(compiler));
  26. }
  27. function clientRoute(config, db, logger, app) {
  28. app.use(express.static(path.resolve(__dirname, '../../static')));
  29. }
  30. function getUnauthorisedResponse(req) {
  31. let message = 'No credentials provided';
  32. if (req.auth) {
  33. message = `Credentials ${req.auth.user}:${req.auth.password} rejected`;
  34. }
  35. return `<h1>401 - ${message}</h1>`;
  36. }
  37. function setupMiddleware(config, app) {
  38. app.use(bodyParser.json());
  39. app.use(basicAuth({
  40. users: {
  41. admin: config.password
  42. },
  43. challenge: true,
  44. unauthorizedResponse: getUnauthorisedResponse,
  45. realm: 'gurubota0e7b34ca'
  46. }));
  47. }
  48. async function run() {
  49. const config = getConfig();
  50. const logger = getLogger(config);
  51. try {
  52. const db = await getDBConnection(config, logger);
  53. const app = express();
  54. setupMiddleware(config, app);
  55. app.use('/api1', apiRoutes(config, db, logger));
  56. setupDevServer(config, db, logger, app);
  57. clientRoute(config, db, logger, app);
  58. const port = process.env.PORT || 3000;
  59. app.listen(port, () => {
  60. logger.info('Listening on port', port);
  61. });
  62. } catch (err) {
  63. logger.error('Error setting up app');
  64. logger.error(err.stack);
  65. }
  66. }
  67. module.exports = {
  68. run
  69. };