Các Hooks của Fiber
Thông qua các hooks được cung cấp bởi framework Fiber, chúng ta có thể ngăn chặn hành vi của framework và tùy chỉnh logic tại các điểm quan trọng.
Bắt đầu từ Fiber v2.30.0, bạn có thể thực thi các hàm người dùng tuỳ chỉnh khi chạy các phương thức cụ thể. Dưới đây là danh sách các hooks này:
- OnRoute (Route Hook)
- OnName (Name Hook)
- OnGroup (Group Hook)
- OnGroupName (Group Name Hook)
- OnListen (Listen Hook)
- OnFork (Fork Hook)
- OnShutdown (Shutdown Hook)
- OnMount (Mount Hook)
Hằng số
// Handlers định nghĩa một hàm để tạo hooks cho 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 là một hook thực thi hàm người dùng mỗi khi một route được đăng ký. Bạn cũng có thể truy cập các thuộc tính của route thông qua tham số route.
Chữ ký
func (app *App) OnRoute(handler ...OnRouteHandler)
OnName (Name Hook)
OnName là một hook thực thi hàm người dùng mỗi khi một route được đặt tên. Bạn cũng có thể truy cập các thuộc tính của route thông qua tham số route.
Lưu ý: OnName chỉ áp dụng cho các route có tên, không áp dụng cho các nhóm.
Chữ ký
func (app *App) OnName(handler ...OnNameHandler)
- Ví dụ về 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")
}
// Kết quả:
// Name: addUser, Method: GET
// Name: destroyUser, Method: DELETE
OnGroup (Group Hook)
OnGroup là một hook thực thi hàm người dùng mỗi khi một nhóm được đăng ký. Bạn cũng có thể truy cập các thuộc tính của nhóm thông qua tham số group.
Chữ ký
func (app *App) OnGroup(handler ...OnGroupHandler)
OnGroupName (Group Name Hook)
OnGroupName là một hook thực thi hàm người dùng mỗi khi một nhóm được đặt tên. Bạn cũng có thể truy cập các thuộc tính của nhóm thông qua tham số group.
Lưu ý: OnGroupName chỉ áp dụng cho các nhóm có tên, không áp dụng cho các route.
Chữ ký
func (app *App) OnGroupName(handler ...OnGroupNameHandler)
OnListen (Listen Hook)
Hook OnListen
được sử dụng để thực thi các hàm người dùng khi thực hiện các hoạt động Listen, ListenTLS, hoặc Listener.
Chữ ký
func (app *App) OnListen(handler ...OnListenHandler)
- Ví dụ về 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)
Hook OnFork
được sử dụng để thực thi các hàm người dùng khi thực hiện hoạt động Fork.
Chữ ký
func (app *App) OnFork(handler ...OnForkHandler)
OnShutdown (Shutdown Hook)
Hook OnShutdown
được sử dụng để thực thi các hàm người dùng sau khi thực hiện hoạt động Shutdown.
Chữ ký
func (app *App) OnShutdown(handler ...OnShutdownHandler)
OnMount
OnMount
là một hook thực hiện các hàm do người dùng định nghĩa sau quá trình mount. Khi một ứng dụng con được mount vào một ứng dụng cha, sự kiện mounting sẽ được kích hoạt, với ứng dụng cha được truyền như một tham số. Nó phù hợp để mount các ứng dụng và nhóm.
Chữ ký
func (h *Hooks) OnMount(handler ...OnMountHandler)
- Ví dụ về 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("Đường dẫn mount của ứng dụng cha: "+parent.MountPath())
// ...
return nil
})
app.Mount("/sub", subApp)
}
// Kết quả:
// Đường dẫn mount của ứng dụng cha:
Lưu ý: Các hook OnName/OnRoute/OnGroup/OnGroupName nhạy cảm với mounting. Nếu bạn sử dụng các route này trên một ứng dụng con và mount nó, các đường dẫn của các route và nhóm sẽ bắt đầu bằng tiền tố mount.