diff --git a/server/index.ts b/server/index.ts index 6a5cf026..4575e78e 100644 --- a/server/index.ts +++ b/server/index.ts @@ -39,7 +39,6 @@ app.set('trust proxy', true) // ensure HTTPS only (X-Forwarded-Proto comes from Fly) app.use((req, res, next) => { if (req.method !== 'GET') return next() - const proto = req.get('X-Forwarded-Proto') const host = getHost(req) if (proto === 'http') { @@ -198,13 +197,19 @@ app.use((req, res, next) => { }) async function getBuild() { - const build = viteDevServer - ? viteDevServer.ssrLoadModule('virtual:remix/server-build') - : // @ts-ignore this should exist before running the server - // but it may not exist just yet. - await import('../build/server/index.js') - // not sure how to make this happy 🤷‍♂️ - return build as unknown as ServerBuild + try { + const build = viteDevServer + ? await viteDevServer.ssrLoadModule('virtual:remix/server-build') + : // @ts-expect-error - the file might not exist yet but it will + // eslint-disable-next-line import/no-unresolved + await import('../build/server/index.js') + + return { build: build as unknown as ServerBuild, error: null } + } catch (error) { + // Catch error and return null to make express happy and avoid an unrecoverable crash + console.error('Error creating build:', error) + return { error: error, build: null as unknown as ServerBuild } + } } if (!ALLOW_INDEXING) { @@ -222,7 +227,14 @@ app.all( serverBuild: getBuild(), }), mode: MODE, - build: getBuild, + build: async () => { + const { error, build } = await getBuild() + // gracefully "catch" the error + if (error) { + throw error + } + return build + }, }), )