ตะลอนเชือม

ผ่านตะลอนที่ 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 และทำการติดตั้ง พาธของเส้นทางและกลุ่มจะเริ่มต้นด้วยคำนำหน้าการติดตั้ง