Hata İşleme

Rotalama işlevleri ve ara yazılımları çalıştırılırken oluşan tüm hataları Fiber'ın yakalaması son derece önemlidir. Bu hataları işleyici işlevine döndürmelisiniz ki Fiber onları yakalayıp işleyebilsin.

  • Örnek
app.Get("/", func(c *fiber.Ctx) error {
    // Hatası Fiber'a iletiliyor
    return c.SendFile("dosya-mevcut-değil")
})

Fiber varsayılan olarak panik hatalarıyla ilgilenmez. Yığında bulunan işleyiciler tarafından atılan herhangi bir panikten kurtulmak ve Go programının çökmesini engellemek için aşağıdaki gibi Recover ara yazılımını dahil etmeniz gerekir:

  • Örnek
package main

import (
    "log"

    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New()
	
	// Panik hataları yakalamak için recover ara yazılımını kullan
    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("Bu panik Fiber tarafından yakalandı")
    })

    log.Fatal(app.Listen(":3000"))
}

fiber.NewError() ile Fiber'ın özel hata yapısını ve status kodlarını iletebilirsiniz. İletmek isteğe bağlı bir ileti ise boş bırakılabilir, boş bırakılırsa varsayılan olarak status kodu ileti (örneğin, 404, Bulunamadı anlamına gelir).

  • Örnek
app.Get("/", func(c *fiber.Ctx) error {
    // 503 Service Unavailable
    return fiber.ErrServiceUnavailable

    // 503 Tatilde!
    return fiber.NewError(fiber.StatusServiceUnavailable, "Tatilde!")
})

Varsayılan Hata İşleyici

Fiber, varsayılan bir hata işleyici sağlar. Standart hatalar için yanıt olarak 500 İç Sunucu Hatası gönderilir. Hata türü fiber.Error ise, yanıt sağlanan status kodu ve ileti kullanılarak gönderilir.

  • Örnek
// Varsayılan hata işleyici
var DefaultErrorHandler = func(c *fiber.Ctx, err error) error {
    // Varsayılan status kodu 500'dür
    code := fiber.StatusInternalServerError

    // Eğer *fiber.Error ise, özel status kodunu al
    var e *fiber.Error
    if errors.As(err, &e) {
        code = e.Code
    }

    // İçerik Türü: text/plain; charset=utf-8 olarak ayarla
    c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)

    // Status kodu ve hata iletiyi döndür
    return c.Status(code).SendString(err.Error())
}

Özel Hata İşleyici

Fiber örneğini yapılandırırken Config kullanarak özel bir hata işleyici ayarlayabilirsiniz.

Çoğu durumda, varsayılan hata işleyicisi yeterlidir. Ancak farklı türde hataları yakalamak ve buna uygun şekilde eylemler almak istiyorsanız, örneğin bildirim e-postaları göndermek veya hataları merkezi bir sisteme günlüğe kaydetmek gibi, o zaman özel bir hata işleyicisi çok faydalı olacaktır. Ayrıca, istemciye özel yanıtlar gönderebilirsiniz, örneğin hata sayfaları veya sadece bir JSON yanıtı.

Aşağıdaki örnek, farklı türde hatalar için hata sayfaları göstermenin nasıl yapıldığını göstermektedir.

  • Örnek
// Özel yapılandırma ile yeni bir Fiber örneği oluştur
app := fiber.New(fiber.Config{
    // Varsayılan hata işleyicisini geçersiz kıl
    ErrorHandler: func(ctx *fiber.Ctx, err error) error {
        // Varsayılan status kodu 500'dür
        code := fiber.StatusInternalServerError

        // Eğer *fiber.Error ise, özel status kodunu al
        var e *fiber.Error
        if errors.As(err, &e) {
            code = e.Code
        }

        // Özel bir hata sayfası gönder
        err = ctx.Status(code).SendFile(fmt.Sprintf("./%d.html", code))
        if err != nil {
            // Eğer SendFile başarısız olursa
            return ctx.Status(fiber.StatusInternalServerError).SendString("İç Sunucu Hatası")
        }

        // İşleyiciden dön
        return nil
    },
})

// ...