Крючки Fiber

Через предоставленные крючки фреймворка Fiber мы можем перехватывать поведение фреймворка и настраивать логику на ключевых точках.

Начиная с Fiber v2.30.0, можно выполнить пользовательские функции при выполнении определенных методов. Вот список этих крючков:

  • OnRoute (крючок маршрута)
  • OnName (крючок имени)
  • OnGroup (крючок группы)
  • OnGroupName (крючок имени группы)
  • OnListen (крючок прослушивания)
  • OnFork (крючок ветвления)
  • OnShutdown (крючок завершения работы)
  • OnMount (крючок установки)

Константы

// Обработчики определяют функцию для создания крючков 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 (крючок маршрута)

OnRoute - это крючок, который выполняет пользовательскую функцию каждый раз при регистрации маршрута. Вы также можете получить доступ к свойствам маршрута через параметр route.

Сигнатура

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

OnName (крючок имени)

OnName - это крючок, который выполняет пользовательскую функцию каждый раз при назначении имени маршрута. Вы также можете получить доступ к свойствам маршрута через параметр route.

Примечание: OnName применяется только к именованным маршрутам, а не к группам.

Сигнатура

func (app *App) OnName(handler ...OnNameHandler)
  • Пример 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("Method: " + 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")
}

// Результат:
// Name: addUser, Method: GET
// Name: destroyUser, Method: DELETE

OnGroup (крючок группы)

OnGroup - это крючок, который выполняет пользовательскую функцию каждый раз при регистрации группы. Вы также можете получить доступ к свойствам группы через параметр group.

Сигнатура

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

OnGroupName (крючок имени группы)

OnGroupName - это крючок, который выполняет пользовательскую функцию каждый раз при назначении имени группы. Вы также можете получить доступ к свойствам группы через параметр group.

Примечание: OnGroupName применяется только к именованным группам, а не к маршрутам.

Сигнатура

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

OnListen (крючок прослушивания)

Крючок OnListen используется для выполнения пользовательских функций при выполнении операций Listen, ListenTLS или Listener.

Сигнатура

func (app *App) OnListen(handler ...OnListenHandler)
  • Пример 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 (крючок ветвления)

Крючок OnFork используется для выполнения пользовательских функций при выполнении операции Fork.

Сигнатура

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

OnShutdown (крючок завершения работы)

Крючок OnShutdown используется для выполнения пользовательских функций после выполнения операции Shutdown.

Сигнатура

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

OnMount

OnMount - это хук, который выполняет пользовательские функции после процесса монтирования. Когда подприложение монтируется к родительскому приложению, возникает событие монтирования, и в качестве параметра передается родительское приложение. Подходит для монтирования приложений и групп.

Сигнатура

func (h *Hooks) OnMount(handler ...OnMountHandler) 
  • Пример использования 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("Путь монтирования родительского приложения: "+parent.MountPath())
        // ...

        return nil
    })

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

// Результат:
// Путь монтирования родительского приложения: 

Примечание: Хуки OnName/OnRoute/OnGroup/OnGroupName чувствительны к монтированию. Если вы используете эти маршруты в подприложении и монтируете его, пути маршрутов и групп начнутся с префикса монтирования.