view react_games/backend/routes/web.ts @ 137:095f7dc5bfce

[MrJuneJune] Fix the js file to hit correct endpoints.
author June Park <parkjune1995@gmail.com>
date Fri, 09 Jan 2026 11:33:35 -0800
parents fb9bcd3145cb
children
line wrap: on
line source

import { Router, static as serveStatic } from 'express';
import path from 'node:path';

type SpaMount = {
  baseUrl: string; // Base path like /games
  entryHtml: string; // we need to define its entry index html
};

export function createWebRouter(publicDir: string, spaMounts: SpaMount[]) {
  const router = Router();

  // order matters so geting just public one first 
  router.use(serveStatic(publicDir, {
    index: 'index.html',
    extensions: ['html'],
    setHeaders: (res) => {
      res.setHeader('X-Content-Type-Options', 'nosniff');
    },
  }));

  for (const { baseUrl, entryHtml } of spaMounts) {
    router.get(baseUrl, (_req, res) => {
      res.sendFile(path.join(publicDir, entryHtml));
    });
    router.get(`${baseUrl}/:rest`, (_req, res) => {
      res.sendFile(path.join(publicDir, entryHtml));
    });
  }


  router.use((_req, res) => {
    res.status(404).send('Not Found');
  });

  return router;
}