"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo manejar eficazmente los errores dentro de mi aplicación web Gin utilizando un enfoque de middleware?

¿Cómo puedo manejar eficazmente los errores dentro de mi aplicación web Gin utilizando un enfoque de middleware?

Publicado el 2024-11-07
Navegar:732

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

Mejora del manejo de errores en Gin

El manejo de errores personalizado con Gin implica el uso de un middleware para manejar las respuestas de error. Esto permite separar la lógica de error de la lógica de flujo 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 en funciones del controlador

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

Configuración del servidor

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

Recursos adicionales

Para obtener más información sobre el manejo de errores en Gin, consulte los siguientes recursos:

  • [gin-gonic issues #327](https://github.com/gin-gonic/gin/issues/327)
  • [número 651 de gin-gonic](https://github.com/gin-gonic/gin /issues/651)
  • [chirrido](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)
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3