Maison > développement back-end > Golang > 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
Libérer: 2024-10-28 01:16:02
original
216 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal