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.