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.