Maison >développement back-end >Golang >Comment implémenter une page d'erreur 404 personnalisée dans le package HTTP standard de Go ?
Les serveurs HTTP affichent généralement un message d'erreur de base « Page 404 introuvable » lorsqu'un utilisateur demande une URL inexistante . Pour offrir une expérience plus informative ou personnalisée, il est nécessaire d'implémenter un gestionnaire de page d'erreur personnalisé.
Dans le package HTTP standard pour Go, il existe un mécanisme pour gérer toutes les requêtes non traitées et afficher une page d'erreur personnalisée. . Voyons comment y parvenir :
Fonction de gestionnaire d'erreurs personnalisé
Créez une fonction pour gérer la page d'erreur personnalisée. Cette fonction prend trois arguments :
func errorHandler(w http.ResponseWriter, r *http.Request, status int) { // Set the HTTP status code. w.WriteHeader(status) // Customize the error response for specific status codes. if status == http.StatusNotFound { fmt.Fprint(w, "Custom 404 error message") } }
Définition de l'erreur personnalisée Gestionnaire
La fonction de gestionnaire d'erreurs doit être liée au serveur HTTP. Cela se fait dans la fonction http.ListenAndServe, qui démarre le serveur sur un port spécifié.
http.ListenAndServe(":12345", nil)
Remplacez nil par un gestionnaire de requêtes HTTP personnalisé qui gère toutes les requêtes.
http.ListenAndServe(":12345", new(http.ServeMux))
Dans ServeMux, ajoutez les gestionnaires de route d'origine pour des URL spécifiques.
mux := http.NewServeMux() mux.HandleFunc("/smth/", smthHandler) mux.HandleFunc("/", homeHandler) http.ListenAndServe(":12345", mux)
Enfin, ajoutez un NotFoundHandler au ServeMux pour gérer toutes les autres URL non gérées par les gestionnaires de routes spécifiques.
mux.NotFoundHandler = http.HandlerFunc(errorHandler)
Exemple de code
L'exemple de code complet qui implémente l'approche ci-dessus est le suivant :
package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/smth/", smthHandler) mux.HandleFunc("/", homeHandler) mux.NotFoundHandler = http.HandlerFunc(errorHandler) http.ListenAndServe(":12345", mux) } func smthHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/smth/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "Welcome to smth") } func homeHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "Welcome home") } func errorHandler(w http.ResponseWriter, r *http.Request, status int) { w.WriteHeader(status) if status == http.StatusNotFound { fmt.Fprint(w, "Custom 404 error message") } }
Ce code définit des gestionnaires de routes pour des URL spécifiques (/smth/ et /) et attribue un gestionnaire d'erreurs personnalisé fonction (errorHandler) pour gérer toutes les autres requêtes non traitées. Lorsqu'un utilisateur tente d'accéder à une URL inexistante, la page d'erreur 404 personnalisée s'affichera à la place du message par défaut « Page 404 introuvable ».
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!