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
},
})
// ...