Maison >développement back-end >Golang >Comment personnaliser la gestion des erreurs 404 dans httprouter avec des gestionnaires personnalisés ?

Comment personnaliser la gestion des erreurs 404 dans httprouter avec des gestionnaires personnalisés ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-25 19:02:02675parcourir

How to Customize 404 Error Handling in httprouter with Custom Handlers?

Gestion des 404 dans httprouter avec des gestionnaires personnalisés

httprouter est un middleware de routage populaire pour Golang, qui vous permet d'enregistrer des gestionnaires personnalisés pour des itinéraires ou des modèles spécifiques. Dans les cas où une route ou une ressource est introuvable, vous souhaiterez peut-être gérer vous-même ces réponses 404 Not Found.

Comprendre le champ NotFound

Le type httprouter.Router a un champ appelé NotFound, qui est un http.Handler. Cela signifie que vous pouvez attribuer un gestionnaire personnalisé à ce champ pour gérer 404 réponses.

Création d'un gestionnaire NotFound personnalisé

Pour créer un gestionnaire NotFound personnalisé, vous devez définir une fonction avec la signature :

func(http.ResponseWriter, *http.Request)

Vous pouvez ensuite convertir cette fonction en http.Handler à l'aide de la fonction d'assistance http.HandlerFunc.

Exemple d'utilisation

Voici un exemple de la façon dont vous peut définir un gestionnaire NotFound personnalisé :

<code class="go">func MyNotFound(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/plain; charset=utf-8")
    w.WriteHeader(http.StatusNotFound)
    w.Write([]byte("My own Not Found handler."))
    w.Write([]byte(" The page you requested could not be found."))
}

var router *httprouter.Router = ... // Your router value
router.NotFound = http.HandlerFunc(MyNotFound)</code>

Ce gestionnaire personnalisé sera automatiquement invoqué par httprouter lorsqu'une réponse 404 NotFound est rencontrée.

Invocation manuelle du gestionnaire NotFound

Dans certains cas, vous souhaiterez peut-être appeler manuellement le gestionnaire NotFound depuis un autre gestionnaire. Vous pouvez y parvenir en passant un ResponseWriter et un *Request à la fonction MyNotFound ou directement à la méthode NotFound du routeur :

<code class="go">func ResourceHandler(w http.ResponseWriter, r *http.Request) {
    exists := ... // Find out if requested resource is valid and available
    if !exists {
        MyNotFound(w, r) // Pass ResponseWriter and Request
        // Or via the Router:
        // router.NotFound(w, r)
        return
    }

    // Resource exists, serve it
    // ...
}</code>

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