Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit 404-Fehlern im statischen Dateiserver von Go für Single-Page-Webanwendungen um?

Wie gehe ich mit 404-Fehlern im statischen Dateiserver von Go für Single-Page-Webanwendungen um?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 01:16:02137Durchsuche

How to Handle 404 Errors in Go's Static File Server for Single-Page Web Applications?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn