Maison  >  Article  >  développement back-end  >  Comment implémenter une meilleure gestion des erreurs avec Gin ?

Comment implémenter une meilleure gestion des erreurs avec Gin ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 12:06:31745parcourir

How to Implement Better Error Handling with Gin?

Meilleure gestion des erreurs avec Gin

Dans cet article, nous explorerons comment implémenter une meilleure gestion des erreurs avec Gin, inspirée par une approche employé dans le cadre Go. Notre objectif est de centraliser la gestion des erreurs, ce qui facilite la gestion et réduit le code en double.

Type d'erreur personnalisé

Similaire au appError personnalisé. tapez dans le framework Go, définissons un type d'erreur personnalisé pour gérer les codes d'erreur et les messages de manière structurée :

<code class="go">type appError struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
}</code>

Middleware pour le rapport d'erreurs

Pour centraliser gestion des erreurs, nous pouvons créer un middleware qui gérera les réponses d'erreur :

<code class="go">func JSONAppErrorReporter() gin.HandlerFunc {
    return jsonAppErrorReporterT(gin.ErrorTypeAny)
}

func jsonAppErrorReporterT(errType gin.ErrorType) gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        detectedErrors := c.Errors.ByType(errType)

        // Process errors and convert them to our custom error type
        if len(detectedErrors) > 0 {
            err := detectedErrors[0].Err
            parsedError := parseAPperror(err) 

            // Put error into response
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>

Dans ce middleware, les erreurs détectées sont analysées dans le type appError et renvoyées sous forme de réponses JSON.

Rapport d'erreurs dans le gestionnaire

Pour signaler les erreurs dans les fonctions du gestionnaire, nous utilisons gin.Context.Error():

<code class="go">func fetchSingleHostGroup(c *gin.Context) {
    hostgroupID := c.Param("id")

    hostGroupRes, err := getHostGroupResource(hostgroupID)

    if err != nil {
        c.Error(err)
        return
    }

    c.JSON(http.StatusOK, *hostGroupRes)
}</code>

Avantages

Cette approche offre plusieurs avantages :

  • La gestion centralisée des erreurs simplifie la gestion des erreurs.
  • Le type d'erreur personnalisé permet un rapport d'erreurs structuré et informatif.
  • Le middleware intercepte les erreurs, les empêchant de se propager tout au long du cycle de requête.

Ressources supplémentaires

Pour des informations plus détaillées et des solutions alternatives, reportez-vous aux ressources suivantes :

  • [Problème Gin : Gestion des erreurs](https://github.com/gin-gonic/gin/issues/214)
  • [Problème Gin : Codes d'état dans la gestion des erreurs](https://github.com/gin-gonic/gin/issues/401)
  • [Gin-Merry : gestionnaire d'erreurs](https://github.com/gin- contrib/gin-merry)
  • [Gin-Frsh-Showerrors](https://github.com/Double0h/gin-frsh-showerrors)

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