fix: SPA fallback для /events при F5 (index.html)

This commit is contained in:
2026-05-27 11:01:47 +10:00
parent 947fc4ab98
commit b19cdf2b47
+21 -2
View File
@@ -1,8 +1,9 @@
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from pathlib import Path from pathlib import Path
from fastapi import FastAPI from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from sqlalchemy import select from sqlalchemy import select
@@ -67,7 +68,25 @@ def create_app() -> FastAPI:
frontend_dist = ROOT / "frontend" / "dist" frontend_dist = ROOT / "frontend" / "dist"
if frontend_dist.is_dir(): if frontend_dist.is_dir():
app.mount("/", StaticFiles(directory=str(frontend_dist), html=True), name="ui") assets_dir = frontend_dist / "assets"
if assets_dir.is_dir():
app.mount(
"/assets",
StaticFiles(directory=str(assets_dir)),
name="ui-assets",
)
@app.get("/{spa_path:path}")
def spa_fallback(spa_path: str) -> FileResponse:
if spa_path.startswith("api/"):
raise HTTPException(status_code=404, detail="Not Found")
candidate = frontend_dist / spa_path
if spa_path and candidate.is_file():
return FileResponse(candidate)
index = frontend_dist / "index.html"
if not index.is_file():
raise HTTPException(status_code=404, detail="UI not built")
return FileResponse(index)
return app return app