"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني التعامل بشكل فعال مع الأخطاء داخل تطبيق الويب Gin الخاص بي باستخدام نهج البرامج الوسيطة؟

كيف يمكنني التعامل بشكل فعال مع الأخطاء داخل تطبيق الويب Gin الخاص بي باستخدام نهج البرامج الوسيطة؟

تم النشر بتاريخ 2024-11-07
تصفح:583

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() { جهاز التوجيه := gin.Default() router.Use(JSONAppErrorReporter()) router.GET("/hostgroups/:id"، fetchSingleHostGroup) جهاز التوجيه.تشغيل(:3000")
func main() {
    router := gin.Default()
    router.Use(JSONAppErrorReporter())
    router.GET("/hostgroups/:id", fetchSingleHostGroup)
    router.Run(":3000")
}
موارد إضافية

لمزيد من الأفكار حول معالجة الأخطاء في Gin، راجع الموارد التالية:

[مشكلة الجن-غونيك] #327](https://github.com/gin-gonic/gin/issues/327)

    [مسألة جين-جونيك رقم 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