Maison  >  Article  >  développement back-end  >  Comment puis-je gérer efficacement les erreurs au sein de mon application Web Gin en utilisant une approche middleware ?

Comment puis-je gérer efficacement les erreurs au sein de mon application Web Gin en utilisant une approche middleware ?

DDD
DDDoriginal
2024-11-01 11:42:29353parcourir

How can I effectively handle errors within my Gin web application using a middleware approach?

Amélioration de la gestion des erreurs dans Gin

La gestion personnalisée des erreurs avec Gin implique l'utilisation d'un middleware pour gérer les réponses d'erreur. Cela permet de séparer la logique d'erreur de la logique de flux normale.

Middleware de gestion des erreurs

<code class="go">type appError struct {
    Code    int
    Message string
}

func JSONAppErrorReporter() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        errors := c.Errors.ByType(gin.ErrorTypeAny)

        if len(errors) > 0 {
            err := errors[0].Err
            var parsedError *appError
            switch err.(type) {
            case *appError:
                parsedError = err.(*appError)
            default:
                parsedError = &appError{
                    Code:    http.StatusInternalServerError,
                    Message: "Internal Server Error",
                }
            }
            // Respond with JSON serialized error
            c.IndentedJSON(parsedError.Code, parsedError)
            c.Abort()
        }
    }
}</code>

Utilisation dans les fonctions de gestionnaire

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

    hostGroupRes, err := getHostGroupResource(hostgroupID)

    if err != nil {
        // Attach error to the context
        c.Error(err)
        return
    }

    // Respond with valid data
    c.JSON(http.StatusOK, *hostGroupRes)
}</code>

Configuration du serveur

<code class="go">func main() {
    router := gin.Default()
    router.Use(JSONAppErrorReporter())
    router.GET("/hostgroups/:id", fetchSingleHostGroup)
    router.Run(":3000")
}</code>

Ressources supplémentaires

Pour plus d'informations sur la gestion des erreurs dans Gin, reportez-vous au ressources suivantes :

  • [numéro gin-gonic #327](https://github.com/gin-gonic/gin/issues/327)
  • [numéro gin-gonic #651](https://github.com/gin-gonic/gin/issues/651)
  • [chirp](https://github.com/go-chi/chi/tree/master/ middleware)
  • [gin-merry](https://github.com/gin-contrib/gin-merry)
  • [gin-frsh-showerrors](https://github. com/frsh/gin-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