Umgang mit 404-Fehlern in einem benutzerdefinierten Dateiserver
In einer Single-Page-Webanwendung ist es wichtig, fehlende Dateien angemessen zu behandeln, um sicherzustellen reibungslose Benutzererfahrung. Bei Verwendung des statischen Dateiservers von Go, http.FileServer(), kann die Behandlung von 404-Fehlern angepasst werden.
Das Standardverhalten von http.FileServer() besteht darin, eine 404 Not Found-Antwort für nicht vorhandene Dateien zurückzugeben. Um solche Anfragen auf eine benutzerdefinierte Seite wie index.html umzuleiten, kann ein Wrapper-Handle erstellt werden.
Erstellen eines Wrapper-Antwortschreibers
Der Wrapper-Antwortschreiber prüft der vom http.FileServer()-Handler zurückgegebene Statuscode. Wenn ein 404 erkannt wird, unterdrückt es das Senden der Antwort und bereitet stattdessen die Umleitung vor.
<code class="go">type NotFoundRedirectRespWr struct { http.ResponseWriter // Embed http.ResponseWriter status int } func (w *NotFoundRedirectRespWr) WriteHeader(status int) { w.status = status // Store the status for our own use if status != http.StatusNotFound { w.ResponseWriter.WriteHeader(status) } } func (w *NotFoundRedirectRespWr) Write(p []byte) (int, error) { if w.status != http.StatusNotFound { return w.ResponseWriter.Write(p) } return len(p), nil // Lie that we successfully written it }</code>
Umschließen des Dateiserver-Handlers
Der Wrapper-Handler verwendet NotFoundRedirectRespWr, um 404-Fehler erkennen.
<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { nfrw := &NotFoundRedirectRespWr{ResponseWriter: w} h.ServeHTTP(nfrw, r) if nfrw.status == 404 { log.Printf("Redirecting %s to index.html.", r.RequestURI) http.Redirect(w, r, "/index.html", http.StatusFound) } } }</code>
Verwendung
In der Hauptfunktion wird der umschlossene Handler anstelle des ursprünglichen http.FileServer()-Handlers verwendet.
<code class="go">func main() { fs := wrapHandler(http.FileServer(http.Dir("."))) http.HandleFunc("/", fs) panic(http.ListenAndServe(":8080", nil)) }</code>
Ergebnis
Jetzt werden Anfragen zu nicht vorhandenen Dateien an /index.html umgeleitet. Das Protokoll zeigt:
Redirecting /a.txt3 to /index.html. Redirecting /favicon.ico to /index.html.
Diese Anpassung ermöglicht eine flexible Behandlung von 404-Fehlern bei der statischen Dateibereitstellung und verbessert so das Benutzererlebnis in Single-Page-Webanwendungen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit 404-Fehlern im statischen Dateiserver von Go für Single-Page-Webanwendungen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!