تفاوت echo.HandlerFun و echo.MiddlewareFunc در ایحاد middleware در labstack در گولنگ

8/9/2024 Go(golang)
89

در حال طراحی middleware در echo در golang برای خودم بودم که این دو نوع تعریف راددیم تفاوت انها را جویا شدم برای من جالب بود 

 

echo.HandlerFun به صورت مستقل بوده و برای ایجاد یک middleware شخصی استفاده میشود در صورتی که echo.MiddlewareFunc  برای افزودن قابلیت به یک middleware و یا تغییر عملکرد یک middleware کابرد دارد

e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
    return func(c echo.Context) error {
        // Pre-process request
        log.Println("Request received")
        
        // Call the next handler
        err := next(c)
        
        // Post-process response
        log.Println("Response sent")
        
        return err
    }
})

echo.HandlerFunc به صورت مستقیم درخواستها را دریافت و خروجی ایجاد میکند و در انتهای زنجیره پاسخ قرار دارد در صورتی که echo.MiddlewareFunc  در میاه این زنجیره عملکرید را به middleware قبلی اضافه میکند 

مثال برا یخود من این بود که این middleware را برای خودم طراحی کنم که اگر کاربر در url درخواستی یک حرف انگلیسی بزرگ تایپ کرد باز آن صفحه برای کاربر قابل دسترس باشد

func CaseInsensitive(next echo.HandlerFunc) echo.HandlerFunc {
	return func(c echo.Context) error {
		req := c.Request()
		req.URL.Path = strings.ToLower(req.URL.Path)
		return next(c)
	}
}

و این middleware که برای csrf استفاده میکنم 

func SessionMiddleware(cfg *config.Config) echo.MiddlewareFunc {
    return func(next echo.HandlerFunc) echo.HandlerFunc {
        return func(c echo.Context) error {
            store := sessions.NewCookieStore([]byte(cfg.SessionSecret))
            c.Set("session_store", store) // Optionally, set the store in the context if needed elsewhere
            return session.Middleware(store)(next)(c)
        }
    }
}