Hooks do Fiber
Através dos hooks fornecidos pelo framework Fiber, podemos interceptar o comportamento do framework e personalizar a lógica em pontos cruciais.
A partir do Fiber v2.30.0, é possível executar funções personalizadas quando certos métodos são executados. Aqui está uma lista desses hooks:
- OnRoute (Hook de Rota)
- OnName (Hook de Nome)
- OnGroup (Hook de Grupo)
- OnGroupName (Hook de Nome do Grupo)
- OnListen (Hook de Escuta)
- OnFork (Hook de Branch)
- OnShutdown (Hook de Desligamento)
- OnMount (Hook de Montagem)
Constantes
// Handlers define uma função para criar hooks para o 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 (Hook de Rota)
OnRoute é um hook que executa a função do usuário toda vez que uma rota é registrada. Você também pode acessar as propriedades da rota através do parâmetro route.
Assinatura
func (app *App) OnRoute(handler ...OnRouteHandler)
OnName (Hook de Nome)
OnName é um hook que executa a função do usuário toda vez que uma rota é nomeada. Você também pode acessar as propriedades da rota através do parâmetro route.
Nota: OnName se aplica apenas a rotas nomeadas, não a grupos.
Assinatura
func (app *App) OnName(handler ...OnNameHandler)
- Exemplo de 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("Método: " + 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")
}
// Resultado:
// Nome: addUser, Método: GET
// Nome: destroyUser, Método: DELETE
OnGroup (Hook de Grupo)
OnGroup é um hook que executa a função do usuário toda vez que um grupo é registrado. Você também pode acessar as propriedades do grupo através do parâmetro group.
Assinatura
func (app *App) OnGroup(handler ...OnGroupHandler)
OnGroupName (Hook de Nome do Grupo)
OnGroupName é um hook que executa a função do usuário toda vez que um grupo é nomeado. Você também pode acessar as propriedades do grupo através do parâmetro group.
Nota: OnGroupName se aplica apenas a grupos nomeados, não a rotas.
Assinatura
func (app *App) OnGroupName(handler ...OnGroupNameHandler)
OnListen (Hook de Escuta)
O hook OnListen
é usado para executar funções definidas pelo usuário ao realizar operações de Listen, ListenTLS ou Listener.
Assinatura
func (app *App) OnListen(handler ...OnListenHandler)
- Exemplo de 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 (Hook de Branch)
O hook OnFork
é usado para executar funções definidas pelo usuário ao realizar a operação de Branch.
Assinatura
func (app *App) OnFork(handler ...OnForkHandler)
OnShutdown (Hook de Desligamento)
O hook OnShutdown
é usado para executar funções definidas pelo usuário após a operação de Desligamento.
Assinatura
func (app *App) OnShutdown(handler ...OnShutdownHandler)
OnMount
OnMount
é um gancho que executa funções definidas pelo usuário após o processo de montagem. Quando um subaplicativo é montado em um aplicativo pai, o evento de montagem é acionado, com o aplicativo pai sendo passado como parâmetro. É adequado para montar aplicativos e grupos.
Assinatura
func (h *Hooks) OnMount(handler ...OnMountHandler)
- Exemplo de OnMount
pacote principal
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("Caminho de montagem do aplicativo pai: "+parent.MountPath())
// ...
return nil
})
app.Mount("/sub", subApp)
}
// Resultado:
// Caminho de montagem do aplicativo pai:
Nota: Os ganchos OnName/OnRoute/OnGroup/OnGroupName são sensíveis à montagem. Se você usar essas rotas em um subaplicativo e montá-lo, os caminhos das rotas e grupos começarão com o prefixo de montagem.