From 80c1f78c6adcf2003656dd6673d44f5c01ae7a86 Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 24 Jul 2024 02:23:12 -0500 Subject: [PATCH] fix: server logic --- server.js | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/server.js b/server.js index 225f5d7..902c027 100644 --- a/server.js +++ b/server.js @@ -3,6 +3,9 @@ import compression from 'compression'; import express from 'express'; import morgan from 'morgan'; +// patch pixi server context +import('./app/server/pixi-context.js'); + const isProduction = process.env.NODE_ENV === 'production'; const isInsecure = process.env.SILPHIUS_INSECURE_HTTP; @@ -32,6 +35,20 @@ else { server = createServer(serverOptions, app); } +// immediately start listening and queueing up connections +let resolve, promise = new Promise((res) => { + resolve = res; +}); +app.use(async (req, res, next) => { + await promise; + next(); +}); +const port = process.env.PORT || 3000; +server.listen(port, () => + console.log(`Express server listening at http${isInsecure ? '' : 's'}://localhost:${port}`) +); + +// possibly load dev server and build the request handler up front const viteDevServer = isProduction ? undefined : await import('vite').then((vite) => @@ -39,26 +56,18 @@ const viteDevServer = isProduction server: {middlewareMode: {server}}, }) ); - -let websocketBuilt = false; - +const build = () => ( + viteDevServer + ? viteDevServer.ssrLoadModule('virtual:remix/server-build') + : import('./build/server/index.js') +); +const ssr = await build(); +await ssr.entry.module.websocket(server, viteDevServer); const remixHandler = createRequestHandler({ - build: async () => { - // patch pixi server context - import('./app/server/pixi-context.js'); - const ssr = await ( - viteDevServer - ? viteDevServer.ssrLoadModule('virtual:remix/server-build') - : import('./build/server/index.js') - ); - if (!websocketBuilt) { - await ssr.entry.module.websocket(server, viteDevServer); - websocketBuilt = true; - } - return ssr; - }, + build: () => ssr, }); +// configure middleware app.use(compression()); // http://expressjs.com/en/advanced/best-practice-security.html#at-a-minimum-disable-x-powered-by-header @@ -85,7 +94,5 @@ app.use(morgan('tiny')); // handle SSR requests app.all('*', remixHandler); -const port = process.env.PORT || 3000; -server.listen(port, () => - console.log(`Express server listening at http${isInsecure ? '' : 's'}://localhost:${port}`) -); +// finally let requests resolve +resolve();