Heim >Backend-Entwicklung >Golang >Wie kann ich die 404-Fehlerbehandlung für einen Go Static File Server anpassen?
Anpassen der Behandlung nicht gefundener Dateien im statischen Go-Dateiserver
Beim Bereitstellen statischer Dateien in Go mit http.FileServer() werden normalerweise Dateien nicht gefunden Gibt einen 404-Statuscode zurück. Um dieses Verhalten anzupassen und stattdessen eine bestimmte Seite bereitzustellen, müssen wir den http.FileServer()-Handler umschließen.
Erstellen eines benutzerdefinierten HTTP-Handler-Wrappers
Wir erstellen einen Benutzerdefinierter http.ResponseWriter-Wrapper (NotFoundRedirectRespWr), um den vom Dateiserver-Handler zurückgegebenen Statuscode abzufangen. Wenn der Status 404 ist, verhindern wir das Senden der Antwort und leiten die Anfrage auf eine bestimmte Seite um (in diesem Fall /index.html).
<code class="go">type NotFoundRedirectRespWr struct { http.ResponseWriter // We 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
Als nächstes umschließen wir den http.FileServer()-Handler mit unserer benutzerdefinierten wrapHandler-Funktion. Diese Funktion fügt unseren benutzerdefinierten Antwortschreiber zur Handlerkette hinzu. Wenn der Antwortstatus 404 ist, leiten wir zu /index.html weiter.
<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
Um unseren benutzerdefinierten Handler zu verwenden, ersetzen wir den ursprünglichen http.FileServer ()-Handler mit unserem umschlossenen Handler in unserer Hauptfunktion:
<code class="go">func main() { fs := wrapHandler(http.FileServer(http.Dir("."))) http.HandleFunc("/", fs) panic(http.ListenAndServe(":8080", nil)) }</code>
Jetzt lösen alle nicht gefundenen Dateien unseren benutzerdefinierten Handler aus und leiten zu /index.html weiter. Dies bietet eine benutzerfreundlichere Erfahrung für Single-Page-Webanwendungen.
Das obige ist der detaillierte Inhalt vonWie kann ich die 404-Fehlerbehandlung für einen Go Static File Server anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!