Maison  >  Article  >  développement back-end  >  Comment gérer de manière personnalisée les erreurs 404 avec un routeur HTTP ?

Comment gérer de manière personnalisée les erreurs 404 avec un routeur HTTP ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 11:39:30561parcourir

How to Custom Handle 404 Errors with HTTP Router?

Gestion des 404 avec le routeur HTTP

La bibliothèque du routeur HTTP fournit des capacités de routage robustes pour le développement d'API. Une tâche courante consiste à gérer les réponses 404 (introuvable). Bien que la documentation mentionne brièvement la possibilité de définir un gestionnaire 404 personnalisé, les détails d'implémentation peuvent prêter à confusion.

Comprendre l'interface du gestionnaire personnalisé

La structure httprouter.Router contient un champ nommé NotFound, qui est une interface http.Handler. Cette interface définit une seule méthode, ServeHTTP(), qui prend un ResponseWriter et une Request comme arguments.

Création d'un gestionnaire 404 personnalisé

Pour créer un gestionnaire 404 personnalisé , définissez une fonction avec la signature de la méthode ServeHTTP() et utilisez la fonction d'assistance http.HandlerFunc() pour la convertir en une valeur http.Handler.

Exemple d'implémentation :

<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) // StatusNotFound = 404
    w.Write([]byte("My own Not Found handler."))
    w.Write([]byte(" The page you requested could not be found."))
}</code>

Définition du gestionnaire personnalisé

Ensuite, attribuez votre gestionnaire personnalisé au champ NotFound de l'objet Routeur HTTP :

<code class="go">router := httprouter.New()
router.NotFound = http.HandlerFunc(MyNotFound)</code>

Manuel Invocation du gestionnaire personnalisé

Si jamais vous devez invoquer manuellement votre gestionnaire 404 personnalisé à partir d'un autre gestionnaire HTTP, vous pouvez le faire en lui transmettant un ResponseWriter et une Request :

<code class="go">func ResourceHandler(w http.ResponseWriter, r *http.Request) {
    exists := ... // Check for resource existence
    if !exists {
        MyNotFound(w, r) // Pass ResponseWriter and Request
        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