Maison > développement back-end > Golang > le corps du texte

Comment gérer les erreurs dans le middleware Gin : une approche centralisée ?

Susan Sarandon
Libérer: 2024-11-05 04:42:02
original
635 Les gens l'ont consulté

How to Handle Errors in Gin Middleware:  A Centralized Approach?

Comment gérer les erreurs dans un middleware Gin

Introduction

Lors de la création d'applications Web à l'aide du framework Gin, il est courant de gérer les erreurs dans chaque itinéraire gestionnaire. Cela peut conduire à une approche lourde et redondante, en particulier lors de la gestion de plusieurs erreurs HTTP. Gin fournit une solution plus élégante grâce à l'utilisation d'un middleware de gestion des erreurs.

Gestion des erreurs basée sur un middleware

Au lieu de gérer explicitement les erreurs dans chaque itinéraire, nous pouvons créer un middleware qui intercepte les erreurs et fournit une manière centralisée de les gérer. La fonction middleware doit inclure les étapes suivantes :

<code class="go">func ErrorHandler(c *gin.Context) {
    // Proceed to the next handler in the chain
    c.Next()

    // Iterate over the errors that occurred during the request handling
    for _, err := range c.Errors {
        // Log the error or perform any other necessary operations
        logger.Error(&quot;whoops&quot;, ...)

        // Send an HTTP response with the appropriate status (or -1 to omit overwriting)
        c.JSON(-1, /* error payload */)
    }
}</code>
Copier après la connexion

Le middleware est ajouté au routeur à l'aide de la méthode Use :

<code class="go">router := gin.New()
router.Use(middleware.ErrorHandler)</code>
Copier après la connexion

Au sein des gestionnaires de route, au lieu de gérer les erreurs manuellement, nous pouvons abandonner la requête avec le statut HTTP approprié :

<code class="go">func (h *Handler) List(c *gin.Context) {
    movies, err := h.service.ListService()

    if err != nil {
        c.AbortWithError(http.StatusInternalServerError, err)
        return
    }

    c.JSON(http.StatusOK, movies)
}</code>
Copier après la connexion

Gestion des erreurs personnalisées

Dans le middleware, nous pouvons inspecter l'erreur d'origine en accédant au champ Err du type gin.Error :

<code class="go">for _, err := range c.Errors {
    switch err.Err {
        case ErrNotFound:
            c.JSON(-1, gin.H{&quot;error&quot;: ErrNotFound.Error()})
    }
    // etc...
}</code>
Copier après la connexion

Accumulation et journalisation des erreurs

L'avantage d'utiliser un middleware est qu'il nous permet d'accumuler plusieurs erreurs lors du traitement de la requête. De plus, nous pouvons ajouter des informations contextuelles aux erreurs, telles que l'ID utilisateur, l'URL de la demande, etc. Ces informations peuvent être utilisées pour une journalisation et un rapport d'erreurs plus détaillés.

Conclusion

En utilisant la gestion des erreurs basée sur un middleware dans Gin, nous pouvons centraliser et simplifier la gestion des erreurs, améliorer la lisibilité du code et améliorer capacités de journalisation des erreurs. Cette approche est plus idiomatique et offre la flexibilité nécessaire pour gérer les erreurs personnalisées et accumuler plusieurs erreurs pendant le cycle de vie de la demande.

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!