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.