Haki Fiber

Za pomocą haki udostępnione przez framework Fiber możemy przechwycić zachowanie frameworka i dostosować logikę w kluczowych momentach.

Począwszy od wersji Fiber v2.30.0, możesz wykonywać niestandardowe funkcje użytkownika podczas uruchamiania określonych funkcji. Oto lista tych haków:

  • OnRoute (Hak trasy)
  • OnName (Hak nazwy)
  • OnGroup (Hak grupy)
  • OnGroupName (Hak nazwy grupy)
  • OnListen (Hak nasłuchiwania)
  • OnFork (Hak fork)
  • OnShutdown (Hak wyłączenia)
  • OnMount (Hak montażu)

Stałe

// Handlery definiują funkcję tworzenia haków dla 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 (Hak trasy)

OnRoute to hak, który wykonuje funkcję użytkownika za każdym razem, gdy trasa jest zarejestrowana. Możesz również uzyskać dostęp do właściwości trasy przez parametr route.

Sygnatura

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

OnName (Hak nazwy)

OnName to hak, który wykonuje funkcję użytkownika za każdym razem, gdy trasa jest nazwana. Możesz również uzyskać dostęp do właściwości trasy przez parametr route.

UWAGA: OnName dotyczy tylko nazwanych tras, a nie grup.

Sygnatura

func (app *App) OnName(handler ...OnNameHandler)
  • Przykład użycia 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("Nazwa: " + r.Name + ", ")
        return nil
    })

    app.Hooks().OnName(func(r fiber.Route) error {
        fmt.Print("Metoda: " + 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")
}

// Wynik:
// Nazwa: addUser, Metoda: GET
// Nazwa: destroyUser, Metoda: DELETE

OnGroup (Hak grupy)

OnGroup to hak, który wykonuje funkcję użytkownika za każdym razem, gdy grupa jest zarejestrowana. Możesz również uzyskać dostęp do właściwości grupy przez parametr group.

Sygnatura

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

OnGroupName (Hak nazwy grupy)

OnGroupName to hak, który wykonuje funkcję użytkownika za każdym razem, gdy grupa jest nazwana. Możesz również uzyskać dostęp do właściwości grupy przez parametr group.

UWAGA: OnGroupName dotyczy tylko nazwanych grup, a nie tras.

Sygnatura

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

OnListen (Hak nasłuchiwania)

Hak OnListen służy do wykonywania funkcji zdefiniowanych przez użytkownika podczas wykonywania operacji Listen, ListenTLS lub Listener.

Sygnatura

func (app *App) OnListen(handler ...OnListenHandler)
  • Przykład użycia 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 (Hak fork)

Hak OnFork służy do wykonywania funkcji zdefiniowanych przez użytkownika podczas wykonywania operacji Fork.

Sygnatura

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

OnShutdown (Hak wyłączenia)

Hak OnShutdown służy do wykonywania funkcji zdefiniowanych przez użytkownika po wykonaniu operacji Shutdown.

Sygnatura

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

OnMount

OnMount jest hakiem wykonującym funkcje zdefiniowane przez użytkownika po procesie montażu. Gdy podaplikacja jest montowana do aplikacji nadrzędnej, wywoływane jest zdarzenie montażu, a aplikacja nadrzędna jest przekazywana jako parametr. Nadaje się do montowania aplikacji i grup.

Sygnatura

func (h *Hooks) OnMount(handler ...OnMountHandler) 
  • Przykład użycia 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("Ścieżka montażu aplikacji nadrzędnej: "+parent.MountPath())
        // ...

        return nil
    })

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

// Wynik:
// Ścieżka montażu aplikacji nadrzędnej: 

Uwaga: Haki OnName/OnRoute/OnGroup/OnGroupName są wrażliwe na montaż. Jeśli używasz tych tras w podaplikacji i ją montujesz, ścieżki tras i grup zaczną się od prefiksu montażu.