Maison  >  Article  >  développement back-end  >  Comment gérer les erreurs 404 dans le serveur de fichiers statique de Go pour les applications Web à page unique ?

Comment gérer les erreurs 404 dans le serveur de fichiers statique de Go pour les applications Web à page unique ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 01:16:02198parcourir

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

Gestion des erreurs 404 dans un serveur de fichiers personnalisé

Dans une application Web d'une seule page, il est essentiel de gérer les fichiers manquants de manière appropriée pour garantir expérience utilisateur fluide. Lors de l'utilisation du serveur de fichiers statique de Go, http.FileServer(), la gestion des erreurs 404 peut être personnalisée.

Le comportement par défaut de http.FileServer() est de renvoyer une réponse 404 Not Found pour les fichiers inexistants. Pour rediriger de telles requêtes vers une page personnalisée, telle que index.html, un handle wrapper peut être créé.

Création d'un rédacteur de réponse wrapper

Le rédacteur de réponse wrapper inspecte le code d'état renvoyé par le gestionnaire http.FileServer(). S'il détecte un 404, il supprime l'envoi de la réponse et se prépare à rediriger à la place.

<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>

Encapsulation du gestionnaire de serveur de fichiers

Le gestionnaire wrapper utilise NotFoundRedirectRespWr pour détecter les erreurs 404.

<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>

Utilisation

Dans la fonction principale, le gestionnaire encapsulé est utilisé à la place du gestionnaire http.FileServer() d'origine.

<code class="go">func main() {
    fs := wrapHandler(http.FileServer(http.Dir(".")))
    http.HandleFunc("/", fs)
    panic(http.ListenAndServe(":8080", nil))
}</code>

Résultat

Désormais, les requêtes vers des fichiers inexistants seront redirigées vers /index.html. Le journal affichera :

Redirecting /a.txt3 to /index.html.
Redirecting /favicon.ico to /index.html.

Cette personnalisation permet une gestion flexible des erreurs 404 dans le service de fichiers statiques, améliorant ainsi l'expérience utilisateur dans les applications Web d'une seule page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn