Fiber Hooks

Durch die Hooks, die vom Fiber-Framework bereitgestellt werden, können wir das Verhalten des Frameworks abfangen und die Logik an entscheidenden Stellen anpassen.

Ab Fiber v2.30.0 ist es möglich, benutzerdefinierte Funktionen auszuführen, wenn bestimmte Methoden ausgeführt werden. Hier ist eine Liste dieser Hooks:

  • OnRoute (Route-Hook)
  • OnName (Name-Hook)
  • OnGroup (Group-Hook)
  • OnGroupName (Gruppenname-Hook)
  • OnListen (Listen-Hook)
  • OnFork (Fork-Hook)
  • OnShutdown (Shutdown-Hook)
  • OnMount (Mount-Hook)

Konstanten

// Handler definieren eine Funktion zur Erstellung von Hooks für 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 (Route-Hook)

OnRoute ist ein Hook, der die Benutzerfunktion jedes Mal ausführt, wenn eine Route registriert wird. Sie können auch auf die Routen-Eigenschaften über den route-Parameter zugreifen.

Signatur

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

OnName (Name-Hook)

OnName ist ein Hook, der die Benutzerfunktion jedes Mal ausführt, wenn einer Route ein Name zugewiesen wird. Sie können auch auf die Routen-Eigenschaften über den route-Parameter zugreifen.

Hinweis: OnName gilt nur für benannte Routen, nicht für Gruppen.

Signatur

func (app *App) OnName(handler ...OnNameHandler)
  • Beispiel für 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("Name: " + r.Name + ", ")
        return nil
    })

    app.Hooks().OnName(func(r fiber.Route) error {
        fmt.Print("Methode: " + 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")
}

// Ergebnis:
// Name: addUser, Methode: GET
// Name: destroyUser, Methode: DELETE

OnGroup (Group-Hook)

OnGroup ist ein Hook, der die Benutzerfunktion jedes Mal ausführt, wenn eine Gruppe registriert wird. Sie können auch auf die Gruppen-Eigenschaften über den group-Parameter zugreifen.

Signatur

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

OnGroupName (Gruppenname-Hook)

OnGroupName ist ein Hook, der die Benutzerfunktion jedes Mal ausführt, wenn einer Gruppe ein Name zugewiesen wird. Sie können auch auf die Gruppen-Eigenschaften über den group-Parameter zugreifen.

Hinweis: OnGroupName gilt nur für benannte Gruppen, nicht für Routen.

Signatur

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

OnListen (Listen-Hook)

Der OnListen-Hook wird verwendet, um benutzerdefinierte Funktionen auszuführen, wenn die Listen, ListenTLS oder Listener-Operationen durchgeführt werden.

Signatur

func (app *App) OnListen(handler ...OnListenHandler)
  • Beispiel für 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 (Fork-Hook)

Der OnFork-Hook wird verwendet, um benutzerdefinierte Funktionen auszuführen, wenn die Fork-Operation durchgeführt wird.

Signatur

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

OnShutdown (Shutdown-Hook)

Der OnShutdown-Hook wird verwendet, um benutzerdefinierte Funktionen nach der Durchführung der Shutdown-Operation auszuführen.

Signatur

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

OnMount

OnMount ist ein Hook, der benutzerdefinierte Funktionen nach dem Montageprozess ausführt. Wenn eine Unteranwendung an eine übergeordnete Anwendung montiert wird, wird das Montageereignis ausgelöst und die übergeordnete Anwendung wird als Parameter übergeben. Er eignet sich für die Montage von Anwendungen und Gruppen.

Signatur

func (h *Hooks) OnMount(handler ...OnMountHandler) 
  • Beispiel für 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("Montagepfad der übergeordneten Anwendung: "+parent.MountPath())
        // ...

        return nil
    })

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

// Ergebnis:
// Montagepfad der übergeordneten Anwendung:

Hinweis: Die Hooks OnName/OnRoute/OnGroup/OnGroupName reagieren empfindlich auf das Montieren. Wenn Sie diese Routen in einer Unteranwendung verwenden und sie montieren, werden die Pfade der Routen und Gruppen mit dem Montagepräfix beginnen.