From 168977a52b10d5bc2ba87830e22824bb79c8014a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 12 May 2024 10:37:46 +0300 Subject: [PATCH] #12: Return a method for app.ts --- server/src/app.ts | 100 ++++++++++++++++++++++++---------------------- server/src/www.ts | 10 +++-- 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/server/src/app.ts b/server/src/app.ts index 7cd3253ce..12b7a2b1b 100644 --- a/server/src/app.ts +++ b/server/src/app.ts @@ -7,54 +7,58 @@ import compression = require('compression'); import sessionParser = require('./routes/session_parser'); import utils = require('./services/utils'); -require('./services/handlers'); -require('./becca/becca_loader'); +function buildApp() { + require('./services/handlers'); + require('./becca/becca_loader'); + + const app = express(); + + // view engine setup + app.set('views', path.join(__dirname, 'views')); + app.set('view engine', 'ejs'); + + if (!utils.isElectron()) { + app.use(compression()); // HTTP compression + } + + app.use(helmet.default({ + hidePoweredBy: false, // errors out in electron + contentSecurityPolicy: false, + crossOriginEmbedderPolicy: false + })); + + app.use(express.text({ limit: '500mb' })); + app.use(express.json({ limit: '500mb' })); + app.use(express.raw({ limit: '500mb' })); + app.use(express.urlencoded({ extended: false })); + app.use(cookieParser()); + app.use(express.static(path.join(__dirname, 'public/root'))); + app.use(`/manifest.webmanifest`, express.static(path.join(__dirname, 'public/manifest.webmanifest'))); + app.use(`/robots.txt`, express.static(path.join(__dirname, 'public/robots.txt'))); + app.use(sessionParser); + app.use(favicon(`${__dirname}/../../common/images/app-icons/win/icon.ico`)); + + require('./routes/assets').register(app); + require('./routes/routes').register(app); + require('./routes/custom').register(app); + require('./routes/error_handlers').register(app); + + // triggers sync timer + require('./services/sync'); + + // triggers backup timer + require('./services/backup'); + + // trigger consistency checks timer + require('./services/consistency_checks'); + + require('./services/scheduler'); + + if (utils.isElectron()) { + require('@electron/remote/main').initialize(); + } -const app = express(); - -// view engine setup -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'ejs'); - -if (!utils.isElectron()) { - app.use(compression()); // HTTP compression + return app; } -app.use(helmet.default({ - hidePoweredBy: false, // errors out in electron - contentSecurityPolicy: false, - crossOriginEmbedderPolicy: false -})); - -app.use(express.text({ limit: '500mb' })); -app.use(express.json({ limit: '500mb' })); -app.use(express.raw({ limit: '500mb' })); -app.use(express.urlencoded({ extended: false })); -app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public/root'))); -app.use(`/manifest.webmanifest`, express.static(path.join(__dirname, 'public/manifest.webmanifest'))); -app.use(`/robots.txt`, express.static(path.join(__dirname, 'public/robots.txt'))); -app.use(sessionParser); -app.use(favicon(`${__dirname}/../../common/images/app-icons/win/icon.ico`)); - -require('./routes/assets').register(app); -require('./routes/routes').register(app); -require('./routes/custom').register(app); -require('./routes/error_handlers').register(app); - -// triggers sync timer -require('./services/sync'); - -// triggers backup timer -require('./services/backup'); - -// trigger consistency checks timer -require('./services/consistency_checks'); - -require('./services/scheduler'); - -if (utils.isElectron()) { - require('@electron/remote/main').initialize(); -} - -export = app; +export = buildApp; diff --git a/server/src/www.ts b/server/src/www.ts index c9dd4f257..b4eace40d 100644 --- a/server/src/www.ts +++ b/server/src/www.ts @@ -18,7 +18,7 @@ function exit() { process.on('SIGINT', exit); process.on('SIGTERM', exit); -import app = require('./app'); +import buildApp = require('./app'); import sessionParser = require('./routes/session_parser'); import fs = require('fs'); import http = require('http'); @@ -27,10 +27,10 @@ import config = require('./services/config'); import log = require('./services/log'); import appInfo = require('./services/app_info'); import ws = require('./services/ws'); -import utils = require('./services/utils'); import port = require('./services/port'); import host = require('./services/host'); import semver = require('semver'); +import type { Express } from "express"; function startTrilium() { if (!semver.satisfies(process.version, ">=10.5.0")) { @@ -40,19 +40,21 @@ function startTrilium() { log.info(JSON.stringify(appInfo, null, 2)); + const app = buildApp(); + const cpuInfos = require('os').cpus(); if (cpuInfos && cpuInfos[0] !== undefined) { // https://github.com/zadam/trilium/pull/3957 log.info(`CPU model: ${cpuInfos[0].model}, logical cores: ${cpuInfos.length} freq: ${cpuInfos[0].speed} Mhz`); // for perf. issues it's good to know the rough configuration } - const httpServer = startHttpServer(); + const httpServer = startHttpServer(app); ws.init(httpServer, sessionParser as any); // TODO: Not sure why session parser is incompatible. return app; } -function startHttpServer() { +function startHttpServer(app: Express) { app.set('port', port); app.set('host', host);