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.