Fiber Hooks

Melalui hook yang disediakan oleh kerangka kerja Fiber, kita dapat mencegat perilaku kerangka kerja dan menyesuaikan logika pada titik-titik penting.

Mulai dari Fiber v2.30.0, Anda dapat mengeksekusi fungsi pengguna kustom saat menjalankan metode-metode tertentu. Berikut adalah daftar hook ini:

  • 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)

Konstanta

// Handler mendefinisikan fungsi untuk membuat hook untuk 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 adalah hook yang mengeksekusi fungsi pengguna setiap kali rute terdaftar. Anda juga dapat mengakses properti rute melalui parameter route.

Tanda Tangan

func (app *App) OnRoute(handler ...OnRouteHandler)

OnName (Name Hook)

OnName adalah hook yang mengeksekusi fungsi pengguna setiap kali rute dinamai. Anda juga dapat mengakses properti rute melalui parameter route.

Catatan: OnName hanya berlaku untuk rute yang memiliki nama, bukan untuk grup.

Tanda Tangan

func (app *App) OnName(handler ...OnNameHandler)
  • Contoh 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")
}

// Hasil:
// Name: addUser, Method: GET
// Name: destroyUser, Method: DELETE

OnGroup (Group Hook)

OnGroup adalah hook yang mengeksekusi fungsi pengguna setiap kali sebuah grup terdaftar. Anda juga dapat mengakses properti grup melalui parameter group.

Tanda Tangan

func (app *App) OnGroup(handler ...OnGroupHandler)

OnGroupName (Group Name Hook)

OnGroupName adalah hook yang mengeksekusi fungsi pengguna setiap kali sebuah grup dinamai. Anda juga dapat mengakses properti grup melalui parameter group.

Catatan: OnGroupName hanya berlaku untuk grup yang memiliki nama, bukan untuk rute.

Tanda Tangan

func (app *App) OnGroupName(handler ...OnGroupNameHandler)

OnListen (Listen Hook)

Hook OnListen digunakan untuk mengeksekusi fungsi-fungsi yang ditentukan pengguna saat melakukan operasi Listen, ListenTLS, atau Listener.

Tanda Tangan

func (app *App) OnListen(handler ...OnListenHandler)
  • Contoh 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)

Hook OnFork digunakan untuk mengeksekusi fungsi-fungsi yang ditentukan pengguna saat melakukan operasi Fork.

Tanda Tangan

func (app *App) OnFork(handler ...OnForkHandler)

OnShutdown (Shutdown Hook)

Hook OnShutdown digunakan untuk mengeksekusi fungsi-fungsi yang ditentukan pengguna setelah melakukan operasi Shutdown.

Tanda Tangan

func (app *App) OnShutdown(handler ...OnShutdownHandler)

OnMount

OnMount adalah sebuah hook yang menjalankan fungsi yang ditentukan pengguna setelah proses mounting. Ketika sub-aplikasi dipasang ke aplikasi induk, peristiwa pemasangan dipicu, dengan aplikasi induk yang dilewatkan sebagai parameter. Hal ini cocok untuk memasang aplikasi dan grup.

Tanda tangan

func (h *Hooks) OnMount(handler ...OnMountHandler)
  • Contoh penggunaan 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("Lokasi pemasangan aplikasi induk: "+parent.MountPath())
        // ...

        return nil
    })

    app.Mount("/sub", subApp)
}

// Hasil:
// Lokasi pemasangan aplikasi induk: 

Catatan: Hook OnName/OnRoute/OnGroup/OnGroupName sensitif terhadap pemasangan. Jika Anda menggunakan rute-rute ini pada sub-aplikasi dan memasangkannya, jalur-jalur rute dan grup akan dimulai dengan awalan pemasangan.