Maison > développement back-end > Golang > Comment implémenter une page d'erreur 404 personnalisée dans le package HTTP standard de Go ?

Comment implémenter une page d'erreur 404 personnalisée dans le package HTTP standard de Go ?

Barbara Streisand
Libérer: 2024-12-28 08:59:17
original
945 Les gens l'ont consulté

How to Implement a Custom 404 Error Page in Go's Standard HTTP Package?

Affichage d'une page d'erreur 404 personnalisée avec le package HTTP standard

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 :

  • w (http.ResponseWriter) : rédacteur de réponse utilisé pour envoyer la page d'erreur personnalisée.
  • r (*http.Request) : Objet de requête pour l'objet inexistant URL.
  • status (int) : Code d'état de l'erreur (généralement http.StatusNotFound).
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")
    }
}
Copier après la connexion

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

Remplacez nil par un gestionnaire de requêtes HTTP personnalisé qui gère toutes les requêtes.

http.ListenAndServe(":12345", new(http.ServeMux))
Copier après la connexion

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

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

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

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!

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