«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу эффективно обрабатывать ошибки в моем веб-приложении Gin, используя подход промежуточного программного обеспечения?

Как я могу эффективно обрабатывать ошибки в моем веб-приложении Gin, используя подход промежуточного программного обеспечения?

Опубликовано 7 ноября 2024 г.
Просматривать:431

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

Улучшение обработки ошибок в Gin

Пользовательская обработка ошибок с помощью Gin предполагает использование промежуточного программного обеспечения для обработки ответов об ошибках. Это позволяет отделить логику ошибок от логики нормального потока.

Промежуточное ПО обработки ошибок

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

Использование в функциях-обработчиках

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

Настройка сервера

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

Дополнительные ресурсы

Для получения дополнительной информации об обработке ошибок в Gin обратитесь к следующим ресурсам:

  • [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)
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3