"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso lidar com erros de maneira eficaz em meu aplicativo da web Gin usando uma abordagem de middleware?

Como posso lidar com erros de maneira eficaz em meu aplicativo da web Gin usando uma abordagem de middleware?

Publicado em 2024-11-07
Navegar:779

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

Aprimorando o tratamento de erros no Gin

O tratamento de erros personalizado com Gin envolve o uso de um middleware para lidar com respostas de erro. Isso permite que a lógica de erro seja separada da lógica de fluxo normal.

Error Handling Middleware

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()
        }
    }
}

Uso em funções de manipulador

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)
}

Configuração do servidor

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

Recursos adicionais

Para obter mais informações sobre o tratamento de erros no Gin, consulte os seguintes recursos:

  • [gin-gonic issue #327](https://github.com/gin-gonic/gin/issues/327)
  • [gin-gonic issue #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)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3