Ganchos de Fiber

A través de los ganchos proporcionados por el marco de trabajo Fiber, podemos interceptar el comportamiento del marco de trabajo y personalizar la lógica en puntos cruciales.

A partir de Fiber v2.30.0, puedes ejecutar funciones personalizadas cuando se ejecutan ciertos métodos. Aquí está la lista de estos ganchos:

  • OnRoute (Gancho de Ruta)
  • OnName (Gancho de Nombre)
  • OnGroup (Gancho de Grupo)
  • OnGroupName (Gancho de Nombre de Grupo)
  • OnListen (Gancho de Escucha)
  • OnFork (Gancho de Fork)
  • OnShutdown (Gancho de Apagado)
  • OnMount (Gancho de Montaje)

Constantes

// Los manejadores definen una función para crear ganchos para 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 (Gancho de Ruta)

OnRoute es un gancho que ejecuta la función del usuario cada vez que se registra una ruta. También puedes acceder a las propiedades de la ruta a través del parámetro route.

Firma

func (app *App) OnRoute(handler ...OnRouteHandler)

OnName (Gancho de Nombre)

OnName es un gancho que ejecuta la función del usuario cada vez que se nombra una ruta. También puedes acceder a las propiedades de la ruta a través del parámetro route.

Nota: OnName solo se aplica a las rutas con nombre, no a los grupos.

Firma

func (app *App) OnName(handler ...OnNameHandler)
  • Ejemplo de OnName
paquete principal

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("Nombre: " + r.Name + ", ")
        return nil
    })

    app.Hooks().OnName(func(r fiber.Route) error {
        fmt.Print("Método: " + r.Method + "\n")
        return nil
    })

    app.Get("/agregar/usuario", func(c *fiber.Ctx) error {
        return c.SendString(c.Route().Name)
    }).Name("agregarUsuario")

    app.Delete("/eliminar/usuario", func(c *fiber.Ctx) error {
        return c.SendString(c.Route().Name)
    }).Name("eliminarUsuario")

    app.Listen(":5000")
}

// Resultado:
// Nombre: agregarUsuario, Método: GET
// Nombre: eliminarUsuario, Método: DELETE

OnGroup (Gancho de Grupo)

OnGroup es un gancho que ejecuta la función del usuario cada vez que se registra un grupo. También puedes acceder a las propiedades del grupo a través del parámetro group.

Firma

func (app *App) OnGroup(handler ...OnGroupHandler)

OnGroupName (Gancho de Nombre de Grupo)

OnGroupName es un gancho que ejecuta la función del usuario cada vez que se nombra un grupo. También puedes acceder a las propiedades del grupo a través del parámetro group.

Nota: OnGroupName solo se aplica a los grupos con nombre, no a las rutas.

Firma

func (app *App) OnGroupName(handler ...OnGroupNameHandler)

OnListen (Gancho de Escucha)

El gancho OnListen se utiliza para ejecutar funciones definidas por el usuario al realizar las operaciones Listen, ListenTLS o Listener.

Firma

func (app *App) OnListen(handler ...OnListenHandler)
  • Ejemplo 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 (Gancho de Fork)

El gancho OnFork se utiliza para ejecutar funciones definidas por el usuario al realizar la operación Fork.

Firma

func (app *App) OnFork(handler ...OnForkHandler)

OnShutdown (Gancho de Apagado)

El gancho OnShutdown se utiliza para ejecutar funciones definidas por el usuario después de realizar la operación de apagado.

Firma

func (app *App) OnShutdown(handler ...OnShutdownHandler)

OnMount

OnMount es un gancho que ejecuta funciones definidas por el usuario después del proceso de montaje. Cuando se monta una subaplicación en una aplicación principal, se desencadena el evento de montaje, pasando la aplicación principal como parámetro. Es adecuado para montar aplicaciones y grupos.

Firma

func (h *Hooks) OnMount(handler ...OnMountHandler) 
  • Ejemplo de OnMount
paquete principal

import (
    "fmt"
    "github.com/gofiber/fiber/v2"
)

func principal() {
    app := New()
    app.Get("/", testSimpleHandler).Name("x")

    subApp := New()
    subApp.Get("/test", testSimpleHandler)
    
    subApp.Hooks().OnMount(func(parent *fiber.App) error {
        fmt.Print("Ruta de montaje de la aplicación principal: "+parent.MountPath())
        // ...

        return nil
    })

    app.Mount("/sub", subApp)
}

// Resultado:
// Ruta de montaje de la aplicación principal: 

Nota: Los ganchos OnName/OnRoute/OnGroup/OnGroupName son sensibles al montaje. Si utiliza estas rutas en una subaplicación y la monta, los caminos de las rutas y grupos comenzarán con el prefijo de montaje.