fix: SPA fallback для /events при F5 (index.html)
This commit is contained in:
+21
-2
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user