跳至主要内容
版本:v2.x

🎣 钩子

使用 Fiber v2.30.0,你可以在运行某些方法时执行自定义用户函数。以下是这些钩子的列表

常量

// Handlers define a function to create hooks for 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 (h *Hooks) OnRoute(handler ...OnRouteHandler)

OnName

OnName 是一个钩子,用于在每次路由命名时执行用户函数。你还可以通过 route 参数获取路由属性。

注意

OnName 仅适用于命名路由,不适用于组。

签名
func (h *Hooks) OnName(handler ...OnNameHandler)
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")
}

// Results:
// Name: addUser, Method: GET
// Name: destroyUser, Method: DELETE

OnGroup

OnGroup 是一个钩子,用于对每个组注册执行用户函数。您还可以通过 group 参数获取组属性。

签名
func (h *Hooks) OnGroup(handler ...OnGroupHandler)

OnGroupName

OnGroupName 是一个钩子,用于对每个组命名执行用户函数。您还可以通过 group 参数获取组属性。

注意

OnGroupName 仅适用于命名组,不适用于路由。

签名
func (h *Hooks) OnGroupName(handler ...OnGroupNameHandler)

OnListen

OnListen 是一个钩子,用于对 Listen、ListenTLS、Listener 执行用户函数。

签名
func (h *Hooks) OnListen(handler ...OnListenHandler)
app := fiber.New(fiber.Config{
DisableStartupMessage: true,
})

app.Hooks().OnListen(func(listenData fiber.ListenData) error {
if fiber.IsChild() {
return nil
}
scheme := "http"
if data.TLS {
scheme = "https"
}
log.Println(scheme + "://" + listenData.Host + ":" + listenData.Port)
return nil
})

app.Listen(":5000")

OnFork

OnFork 是一个钩子,用于对 Fork 执行用户函数。

签名
func (h *Hooks) OnFork(handler ...OnForkHandler)

OnShutdown

OnShutdown 是一个钩子,用于在 Shutdown 后执行用户函数。

签名
func (h *Hooks) OnShutdown(handler ...OnShutdownHandler)

OnMount

OnMount 是一个钩子,用于在挂载过程后执行用户函数。当子应用挂载到父应用上时,将触发挂载事件。父应用作为参数传递。它适用于应用和组挂载。

签名
func (h *Hooks) OnMount(handler ...OnMountHandler) 
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("Mount path of parent app: "+parent.MountPath())
// ...

return nil
})

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

// Result:
// Mount path of parent app:
注意

OnName/OnRoute/OnGroup/OnGroupName 钩子对挂载敏感。如果您在子应用上使用其中一个路由并挂载它;路由和组的路径将以挂载前缀开头。