ตะลอนเชือม
ผ่านตะลอนที่ Fiber framework มีให้ เราสามารถแอบแฝงพฤติกรรมของ framework และปรับแต่งตรรกะที่จุดสำคัญได้
เริ่มตั้นตั้งแต่เวอร์ชัน v2.30.0 ของ Fiber , คุณสามารถ execute ฟังก์ชันของผู้ใช้เมื่อทำการรัน certain methods ได้ นี่คือรายการของตะลอนเหล่านั้น:
- OnRoute (Route Hook)
- OnName (Name Hook)
- OnGroup (Group Hook)
- OnGroupName (Group Name Hook)
- OnListen (Listen Hook)
- OnFork (Fork Hook)
- OnShutdown (Shutdown Hook)
- OnMount (Mount Hook)
ค่าคงที่
// Handlers define a function to create hooks for 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 (Route Hook)
OnRoute คือตะลอนที่ execute ฟังก์ชันของผู้ใช้ทุกครั้งที่ทำการลงทะเบียนเส้นทาง (route) คุณยังสามารถเข้าถึงคุณสมบัติของเส้นทางผ่าน parameter route ด้วย
Signature
func (app *App) OnRoute(handler ...OnRouteHandler)
OnName (Name Hook)
OnName คือตะลอนที่ execute ฟังก์ชันของผู้ใช้ทุกครั้งที่ตั้งชื่อเส้นทาง (route) คุณยังสามารถเข้าถึงคุณสมบัติของเส้นทางผ่าน parameter route ด้วย
หมายเหตุ: OnName ใช้กับเส้นทางที่ตั้งชื่อเท่านั้น ไม่ใช้กับกลุ่ม (group)
Signature
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 (Group Hook)
OnGroup คือตะลอนที่ execute ฟังก์ชันของผู้ใช้ทุกครั้งที่ทำการลงทะเบียนกลุ่ม (group) คุณยังสามารถเข้าถึงคุณสมบัติของกลุ่มผ่าน parameter group ด้วย
Signature
func (app *App) OnGroup(handler ...OnGroupHandler)
OnGroupName (Group Name Hook)
OnGroupName คือตะลอนที่ execute ฟังก์ชันของผู้ใช้ทุกครั้งที่ตั้งชื่อกลุ่ม (group) คุณยังสามารถเข้าถึงคุณสมบัติของกลุ่มผ่าน parameter group ด้วย
หมายเหตุ: OnGroupName ใช้กับกลุ่มที่ตั้งชื่อเท่านั้น ไม่ใช้กับเส้นทาง (route)
Signature
func (app *App) OnGroupName(handler ...OnGroupNameHandler)
OnListen (Listen Hook)
ตะลอน OnListen
ใช้สำหรับ execute ฟังก์ชันที่กำหนดไว้เมื่อทำการทำงาน Listen, ListenTLS, หรือ operation ของ Listener
Signature
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 (Fork Hook)
ตะลอน OnFork
ใช้สำหรับ execute ฟังก์ชันที่กำหนดไว้เมื่อทำการทำงาน Fork operation
Signature
func (app *App) OnFork(handler ...OnForkHandler)
OnShutdown (Shutdown Hook)
ตะลอน OnShutdown
ใช้สำหรับ execute ฟังก์ชันที่กำหนดไว้หลังจากทำการทำงาน Shutdown operation
Signature
func (app *App) OnShutdown(handler ...OnShutdownHandler)
OnMount
OnMount
เป็นตัวช่วยที่ดำเนินการฟังก์ชันที่ผู้ใช้กำหนดหลังกระบวนการติดตั้งเสร็จสิ้น เมื่อมีการติดตั้ง sub-application ไปยัง parent application การเกิดเหตุการณ์การติดตั้ง (mounting event) ซึ่งจะถูกเรียกใช้ โดย parent application จะถูกส่งผ่านเป็นพารามิเตอร์ มันเหมาะสำหรับการติดตั้งแอพพลิเคชั่นและกลุ่มต่างๆ
ลายเซนเจอร์
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("Mount path ของ parent application: "+parent.MountPath())
// ...
return nil
})
app.Mount("/sub", subApp)
}
// ผลลัพธ์:
// Mount path ของ parent application:
หมายเหตุ: hooks เช่น OnName/OnRoute/OnGroup/OnGroupName สามารถตระหนักรู้ถึงการติดตั้ง หากคุณใช้เส้นทางเหล่านี้บน sub-application และทำการติดตั้ง พาธของเส้นทางและกลุ่มจะเริ่มต้นด้วยคำนำหน้าการติดตั้ง