Ganci Fiber
Attraverso i ganci forniti dal framework Fiber, possiamo intercettare il comportamento del framework e personalizzare la logica nei punti cruciali.
A partire da Fiber v2.30.0, è possibile eseguire funzioni personalizzate dell'utente durante l'esecuzione di determinati metodi. Ecco un elenco di questi ganci:
- OnRoute (Gancio della rotta)
- OnName (Gancio del nome)
- OnGroup (Gancio del gruppo)
- OnGroupName (Gancio del nome del gruppo)
- OnListen (Gancio di ascolto)
- OnFork (Gancio di fork)
- OnShutdown (Gancio di chiusura)
- OnMount (Gancio di mount)
Costanti
// Gli handler definiscono una funzione per creare ganci per 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 (Gancio della rotta)
OnRoute è un gancio che esegue la funzione dell'utente ogni volta che una rotta viene registrata. Puoi anche accedere alle proprietà della rotta attraverso il parametro route.
Firma
func (app *App) OnRoute(handler ...OnRouteHandler)
OnName (Gancio del nome)
OnName è un gancio che esegue la funzione dell'utente ogni volta che una rotta viene nominata. Puoi anche accedere alle proprietà della rotta attraverso il parametro route.
Nota: OnName si applica solo alle rotte nominate, non ai gruppi.
Firma
func (app *App) OnName(handler ...OnNameHandler)
- Esempio di 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("Nome: " + r.Name + ", ")
return nil
})
app.Hooks().OnName(func(r fiber.Route) error {
fmt.Print("Metodo: " + 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")
}
// Risultato:
// Nome: addUser, Metodo: GET
// Nome: destroyUser, Metodo: DELETE
OnGroup (Gancio del gruppo)
OnGroup è un gancio che esegue la funzione dell'utente ogni volta che viene registrato un gruppo. Puoi anche accedere alle proprietà del gruppo attraverso il parametro group.
Firma
func (app *App) OnGroup(handler ...OnGroupHandler)
OnGroupName (Gancio del nome del gruppo)
OnGroupName è un gancio che esegue la funzione dell'utente ogni volta che viene nominato un gruppo. Puoi anche accedere alle proprietà del gruppo attraverso il parametro group.
Nota: OnGroupName si applica solo ai gruppi nominati, non alle rotte.
Firma
func (app *App) OnGroupName(handler ...OnGroupNameHandler)
OnListen (Gancio di ascolto)
Il gancio OnListen
viene utilizzato per eseguire funzioni definite dall'utente durante l'esecuzione delle operazioni di Listen, ListenTLS o Listener.
Firma
func (app *App) OnListen(handler ...OnListenHandler)
- Esempio di OnListen
app := fiber.New(fiber.Config{
DisableStartupMessage: true,
})
app.Hooks().OnListen(func(listenData fiber.ListenData) error {
if fiber.IsChild() {
return nil
}
schema := "http"
if listenData.TLS {
schema = "https"
}
log.Println(schema + "://" + listenData.Host + ":" + listenData.Port)
return nil
})
app.Listen(":5000")
OnFork (Gancio di fork)
Il gancio OnFork
viene utilizzato per eseguire funzioni definite dall'utente durante l'esecuzione dell'operazione di Fork.
Firma
func (app *App) OnFork(handler ...OnForkHandler)
OnShutdown (Gancio di chiusura)
Il gancio OnShutdown
viene utilizzato per eseguire funzioni definite dall'utente dopo aver eseguito l'operazione di Shutdown.
Firma
func (app *App) OnShutdown(handler ...OnShutdownHandler)
OnMount
OnMount
è un hook che esegue funzioni definite dall'utente dopo il processo di montaggio. Quando viene montata un'applicazione secondaria su un'applicazione genitore, l'evento di montaggio viene attivato, con l'applicazione genitore passata come parametro. È adatto per il montaggio di applicazioni e gruppi.
Firma
func (h *Hooks) OnMount(handler ...OnMountHandler)
- Esempio di 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("Percorso di montaggio dell'applicazione genitore: "+parent.MountPath())
// ...
return nil
})
app.Mount("/sub", subApp)
}
// Risultato:
// Percorso di montaggio dell'applicazione genitore:
Nota: Gli hooks OnName/OnRoute/OnGroup/OnGroupName sono sensibili al montaggio. Se si utilizzano questi percorsi su un'applicazione secondaria e la si monta, i percorsi delle route e dei gruppi inizieranno con il prefisso di montaggio.