index.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. const config = require('./config');
  2. const {initLogger, getLog} = require('./core/getLogger');
  3. initLogger(config);
  4. const log = getLog();
  5. const fs = require('fs-extra');
  6. const path = require('path');
  7. const express = require('express');
  8. const compression = require('compression');
  9. const SqliteConnectionPool = require('./core/SqliteConnectionPool');
  10. async function init() {
  11. await fs.ensureDir(config.dataDir);
  12. await fs.ensureDir(config.uploadDir);
  13. await fs.ensureDir(config.tempDir);
  14. await fs.emptyDir(config.tempDir);
  15. const appDir = `${config.publicDir}/app`;
  16. const appNewDir = `${config.publicDir}/app_new`;
  17. if (await fs.pathExists(appNewDir)) {
  18. await fs.remove(appDir);
  19. await fs.move(appNewDir, appDir);
  20. }
  21. }
  22. async function main() {
  23. const connPool = new SqliteConnectionPool(20, config);
  24. log('Initializing');
  25. await init();
  26. log('Opening database');
  27. await connPool.init();
  28. //servers
  29. for (let server of config.servers) {
  30. if (server.mode !== 'none') {
  31. const app = express();
  32. const serverConfig = Object.assign({}, config, server);
  33. let devModule = undefined;
  34. if (serverConfig.branch == 'development') {
  35. const devFileName = './dev.js'; //ignored by pkg -50Mb executable size
  36. devModule = require(devFileName);
  37. devModule.webpackDevMiddleware(app);
  38. }
  39. app.use(compression({ level: 1 }));
  40. app.use(express.json());
  41. if (devModule)
  42. devModule.logQueries(app);
  43. app.use(express.static(serverConfig.publicDir, {
  44. maxAge: '30d',
  45. setHeaders: (res, filePath) => {
  46. if (path.basename(path.dirname(filePath)) == 'tmp') {
  47. res.set('Content-Type', 'text/xml');
  48. res.set('Content-Encoding', 'gzip');
  49. }
  50. }
  51. }));
  52. require('./routes').initRoutes(app, connPool, serverConfig);
  53. if (devModule) {
  54. devModule.logErrors(app);
  55. } else {
  56. app.use(function(err, req, res, next) {// eslint-disable-line no-unused-vars
  57. log(LM_ERR, err.stack);
  58. res.sendStatus(500);
  59. });
  60. }
  61. app.listen(serverConfig.port, serverConfig.ip, function() {
  62. log(`Server-${serverConfig.serverName} is ready on ${serverConfig.ip}:${serverConfig.port}, mode: ${serverConfig.mode}`);
  63. });
  64. }
  65. }
  66. }
  67. main();