Fiber Hooks
Fiber çerçevesi tarafından sağlanan kancalar aracılığıyla çerçevenin davranışını durdurabilir ve kritik noktalarda mantığı özelleştirebiliriz.
Fiber v2.30.0'dan itibaren belirli metodları çalıştırırken özel kullanıcı fonksiyonlarını yürütebilirsiniz. İşte bu kancaların bir listesi:
- OnRoute (Rota Kancası)
- OnName (İsim Kancası)
- OnGroup (Grup Kancası)
- OnGroupName (Grup İsmi Kancası)
- OnListen (Dinleme Kancası)
- OnFork (Çatallama Kancası)
- OnShutdown (Kapatma Kancası)
- OnMount (Bağlama Kancası)
Sabitler
// Handlers, Fiber için kancalar oluşturmak için bir fonksiyon tanımlar.
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 (Rota Kancası)
OnRoute, her bir rota kaydedildiğinde kullanıcı fonksiyonunu yürüten bir kancadır. Ayrıca, rota parametresi aracılığıyla rota özelliklerine erişebilirsiniz.
İmza
func (app *App) OnRoute(handler ...OnRouteHandler)
OnName (İsim Kancası)
OnName, her bir rota isimlendirildiğinde kullanıcı fonksiyonunu yürüten bir kancadır. Ayrıca, rota parametresi aracılığıyla rota özelliklerine erişebilirsiniz.
Not: OnName yalnızca isimlendirilmiş rotalara uygulanır, gruplara uygulanmaz.
İmza
func (app *App) OnName(handler ...OnNameHandler)
- OnName Örneği
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")
}
// Sonuç:
// Name: addUser, Method: GET
// Name: destroyUser, Method: DELETE
OnGroup (Grup Kancası)
OnGroup, her bir grup kaydedildiğinde kullanıcı fonksiyonunu yürüten bir kancadır. Ayrıca, grup parametresi aracılığıyla grup özelliklerine erişebilirsiniz.
İmza
func (app *App) OnGroup(handler ...OnGroupHandler)
OnGroupName (Grup İsmi Kancası)
OnGroupName, her bir grup isimlendirildiğinde kullanıcı fonksiyonunu yürüten bir kancadır. Ayrıca, grup parametresi aracılığıyla grup özelliklerine erişebilirsiniz.
Not: OnGroupName yalnızca isimlendirilmiş gruplara uygulanır, rotalara uygulanmaz.
İmza
func (app *App) OnGroupName(handler ...OnGroupNameHandler)
OnListen (Dinleme Kancası)
OnListen
kancası, Listen, ListenTLS veya Listener işlemlerini gerçekleştirirken kullanıcı tanımlı fonksiyonları yürütmek için kullanılır.
İmza
func (app *App) OnListen(handler ...OnListenHandler)
- OnListen Örneği
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 (Çatallama Kancası)
OnFork
kancası, Fork işlemi gerçekleştirilirken kullanıcı tanımlı fonksiyonları yürütmek için kullanılır.
İmza
func (app *App) OnFork(handler ...OnForkHandler)
OnShutdown (Kapatma Kancası)
OnShutdown
kancası, Kapatma işlemi gerçekleştirildikten sonra kullanıcı tanımlı fonksiyonları yürütmek için kullanılır.
İmza
func (app *App) OnShutdown(handler ...OnShutdownHandler)
OnMount
OnMount
, montaj işleminden sonra kullanıcı tanımlı işlevleri yürüten bir kancadır. Bir alt uygulama, bir ana uygulamaya monte edildiğinde, montaj etkinliği tetiklenir ve bir parametre olarak ana uygulama iletilir. Uygulamaların ve grupların montajı için uygundur.
İmza
func (h *Hooks) OnMount(handler ...OnMountHandler)
- OnMount örneği
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("Ebeveyn uygulamanın montaj yolu: "+parent.MountPath())
// ...
return nil
})
app.Mount("/sub", subApp)
}
// Sonuç:
// Ebeveyn uygulamanın montaj yolu:
Not: OnName / OnRoute / OnGroup / OnGroupName kanca noktaları, montaja duyarlıdır. Bu rotaları bir alt uygulamada kullanırsanız ve onu monte ederseniz, rotaların ve grupların yolları montaj öneki ile başlayacaktır.