78
در حال طراحی 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)
}
}
}