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!