خطافات الألياف
من خلال الخطافات المقدمة من إطار العمل Fiber، يمكننا التقاط سلوك الإطار وتخصيص المنطق في نقاط حاسمة.
ابتداءً من Fiber v2.30.0، يمكنك تنفيذ وظائف المستخدم المخصصة عند تشغيل بعض الأساليب. إليك قائمة بهذه الخطافات:
- OnRoute (خطاف الطريق)
- OnName (خطاف الاسم)
- OnGroup (خطاف المجموعة)
- OnGroupName (خطاف اسم المجموعة)
- OnListen (خطاف الاستماع)
- OnFork (خطاف الفork)
- OnShutdown (خطاف الإيقاف)
- OnMount (خطاف التركيب)
الثوابت
// Handlers تعرف دالة لإنشاء خطافات لـ Fiber.
type OnRouteHandler = func(Route) error
type OnNameHandler = OnRouteHandler
type OnGroupHandler = func(Group) error
type OnGroupNameHandler = OnGroupHandler
type OnListenHandler = func(ListenData) error
type OnForkHandler = func(int) error
type OnShutdownHandler = func() error
type OnMountHandler = func(*App) error
OnRoute (خطاف الطريق)
OnRoute هو خطاف ينفذ وظيفة المستخدم في كل مرة يتم فيها تسجيل طريق. يمكنك أيضًا الوصول إلى خصائص الطريق من خلال المعلمة route.
التوقيع
func (app *App) OnRoute(handler ...OnRouteHandler)
OnName (خطاف الاسم)
OnName هو خطاف ينفذ وظيفة المستخدم في كل مرة يتم فيها تسمية طريق. يمكنك أيضًا الوصول إلى خصائص الطريق من خلال المعلمة route.
ملاحظة: OnName ينطبق فقط على الطرق المسماة، وليس على المجموعات.
التوقيع
func (app *App) OnName(handler ...OnNameHandler)
- مثال على OnName
package main
import (
"fmt"
"github.com/gofiber/fiber/v2"
)
func main() {
app := fiber.New()
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString(c.Route().Name)
}).Name("index")
app.Hooks().OnName(func(r fiber.Route) error {
fmt.Print("Name: " + r.Name + ", ")
return nil
})
app.Hooks().OnName(func(r fiber.Route) error {
fmt.Print("Method: " + r.Method + "\n")
return nil
})
app.Get("/add/user", func(c *fiber.Ctx) error {
return c.SendString(c.Route().Name)
}).Name("addUser")
app.Delete("/destroy/user", func(c *fiber.Ctx) error {
return c.SendString(c.Route().Name)
}).Name("destroyUser")
app.Listen(":5000")
}
// النتيجة:
// Name: addUser, Method: GET
// Name: destroyUser, Method: DELETE
OnGroup (خطاف المجموعة)
OnGroup هو خطاف ينفذ وظيفة المستخدم في كل مرة يتم فيها تسجيل مجموعة. يمكنك أيضًا الوصول إلى خصائص المجموعة من خلال المعلمة group.
التوقيع
func (app *App) OnGroup(handler ...OnGroupHandler)
OnGroupName (خطاف اسم المجموعة)
OnGroupName هو خطاف ينفذ وظيفة المستخدم في كل مرة يتم فيها تسمية مجموعة. يمكنك أيضًا الوصول إلى خصائص المجموعة من خلال المعلمة group.
ملاحظة: OnGroupName ينطبق فقط على المجموعات المسماة، وليس على الطرق.
التوقيع
func (app *App) OnGroupName(handler ...OnGroupNameHandler)
OnListen (خطاف الاستماع)
خطاف OnListen
يستخدم لتنفيذ دوال مستخدمة مع عمليات الاستماع، الاستماع بالمعايير الآمنة، أو الإستماع بالمستمعات.
التوقيع
func (app *App) OnListen(handler ...OnListenHandler)
- مثال على OnListen
app := fiber.New(fiber.Config{
DisableStartupMessage: true,
})
app.Hooks().OnListen(func(listenData fiber.ListenData) error {
if fiber.IsChild() {
return nil
}
scheme := "http"
if listenData.TLS {
scheme = "https"
}
log.Println(scheme + "://" + listenData.Host + ":" + listenData.Port)
return nil
})
app.Listen(":5000")
OnFork (خطاف الفورك)
خطاف OnFork
يستخدم لتنفيذ دوال مستخدمة مع عمليات الفورك.
التوقيع
func (app *App) OnFork(handler ...OnForkHandler)
OnShutdown (خطاف الإيقاف)
خطاف OnShutdown
يستخدم لتنفيذ دوال مستخدمة بعد عملية الإيقاف.
التوقيع
func (app *App) OnShutdown(handler ...OnShutdownHandler)
OnMount (عند_التركيب)
OnMount
هو خطاف يقوم بتنفيذ الدوال المحددة من قبل المستخدم بعد عملية التركيب. عندما يتم تركيب تطبيق فرعي على تطبيق رئيسي، يتم تشغيل حدث التركيب، مع تمرير التطبيق الرئيسي كمعلمة. وهو مناسب لتركيب التطبيقات والمجموعات.
التوقيع
func (h *Hooks) OnMount(handler ...OnMountHandler)
- مثال على OnMount
package main
import (
"fmt"
"github.com/gofiber/fiber/v2"
)
func main() {
app := New()
app.Get("/", testSimpleHandler).Name("x")
subApp := New()
subApp.Get("/test", testSimpleHandler)
subApp.Hooks().OnMount(func(parent *fiber.App) error {
fmt.Print("مسار تركيب التطبيق الأصلي: "+parent.MountPath())
// ...
return nil
})
app.Mount("/sub", subApp)
}
// النتيجة:
// مسار تركيب التطبيق الأصلي:
ملاحظة: خطافات OnName/OnRoute/OnGroup/OnGroupName حساسة لعملية التركيب. إذا استخدمت هذه المسارات على تطبيق فرعي وقمت بتركيبه، ستبدأ مسارات المسارات والمجموعات بالبادئة التي تم التركيب بها.