فیبر هوک ها

Persian Translation:

با استفاده از هوک‌های ارائه شده توسط چارچوب Fiber، ما می‌توانیم رفتار چارچوب را اعمال کرده و منطق را در نقاط حیاتی سفارشی‌سازی کنیم.

شروع از Fiber v2.30.0، شما می‌توانید توابع کاربری شخصی را هنگام اجرای برخی از متدها اجرا کنید. در زیر لیستی از این هوک‌ها آمده است:

  • OnRoute (هوک مسیر)
  • OnName (هوک نام)
  • OnGroup (هوک گروه)
  • OnGroupName (هوک نام گروه)
  • OnListen (هوک گوش کردن)
  • OnFork (هوک تشعشع)
  • OnShutdown (هوک خاموش شدن)
  • OnMount (هوک نصب)

ثابت‌ها

// 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 (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 حساس به مونتینگ هستند. اگر از این مسیرها روی یک زیر-اپلیکیشن استفاده کنید و آن را مونت کنید، مسیرها و گروه‌ها با پیشوند مونت شده شروع می‌شوند.