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
Barbara Streisandoriginal
2024-12-28 08:59:17896parcourir

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")
    }
}

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!

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