Files
Kontrollverlust/frontend.go
T
irrlichtandClaude Opus 5.5 43c640dee6 Rechtstexte wieder gestylt: als Vite-Einstiege mit app.css gebaut
Die Seiten verlinkten /css/app.css, das es seit dem React-Umbau nicht mehr
gibt. Jetzt liegen sie unter frontend/static/docs, Vite baut sie mit und
schreibt den Link auf das gehashte app.css um; serveDoc liefert sie unter
den bisherigen Adressen /static/docs/… aus web/ aus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
2026-09-27 15:14:53 +02:00

46 lines
1.6 KiB
Go

package main
import (
"net/http"
"path"
"strings"
"github.com/go-chi/chi/v5"
)
// webDir enthält das gebaute React-Frontend (frontend/ -> npm run build):
// index.html plus gehashte Dateien unter assets/.
const webDir = "web"
// serveApp liefert die index.html des Frontends; das Routing übernimmt der
// Client. Nur für die Seitenrouten des Frontends registriert (siehe routes) --
// beliebige andere Pfade bleiben ein echtes 404, statt als Seite zu gelten und
// in der Impression-Statistik zu landen. no-cache, damit nach einem Deploy
// sofort die neue index.html mit den neuen Asset-Namen geladen wird.
func serveApp(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-cache")
http.ServeFile(w, r, webDir+"/index.html")
}
// serveDoc liefert einen Rechtstext. Sie werden mit dem Frontend gebaut
// (frontend/static/docs), damit sie dasselbe app.css bekommen.
func serveDoc(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-cache")
http.ServeFile(w, r, webDir+"/static/docs/"+path.Base(chi.URLParam(r, "page")))
}
// serveAssets liefert die gebauten JS/CSS-Dateien. Ihre Namen enthalten einen
// Inhalts-Hash, sie ändern sich also nie -> dauerhaft cachebar. Verzeichnisse
// gibt es nicht zu sehen (kein Listing).
func serveAssets() http.Handler {
files := http.FileServer(http.Dir(webDir))
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.HasSuffix(r.URL.Path, "/") {
http.NotFound(w, r)
return
}
w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
files.ServeHTTP(w, r)
})
}