Obsługa błędów
Zabezpieczenie tego, aby Fiber przechwytywał wszystkie błędy, które występują podczas wykonywania obsługiwaczy tras i oprogramowania pośredniczącego, jest kluczowe. Musisz zwrócić je do funkcji obsługującej, aby Fiber mógł je przechwycić i przetworzyć.
- Przykład
app.Get("/", func(c *fiber.Ctx) error {
// Przekaż błąd do Fibera
return c.SendFile("plik-nie-istnieje")
})
Domyślnie Fiber nie obsługuje błędów paniki. Aby odzyskać się z ewentualnej paniki rzucanej przez obsługiwaczy w stosie i uniknąć awarii programu Go, musisz dołączyć oprogramowanie pośredniczące Recover
, jak pokazano poniżej:
- Przykład
package main
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Użyj oprogramowania pośredniczącego Recover do przechwytywania błędów paniki
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("Ta panika została przechwycona przez Fibera")
})
log.Fatal(app.Listen(":3000"))
}
Możesz użyć niestandardowej struktury błędu Fibera fiber.NewError()
do przekazania dodatkowych kodów stanu
. Przekazywanie wiadomości jest opcjonalne; jeśli pozostanie puste, zostanie użyta domyślna wiadomość kodu stanu (np. 404
równa się Nie znaleziono
).
- Przykład
app.Get("/", func(c *fiber.Ctx) error {
// 503 Serwer niedostępny
return fiber.ErrServiceUnavailable
// 503 Na wakacjach!
return fiber.NewError(fiber.StatusServiceUnavailable, "Na wakacjach!")
})
Domyślny obsługiwacz błędów
Fiber zapewnia domyślny obsługiwacz błędów. Dla standardowych błędów odpowiedź zostanie wysłana jako 500 Internal Server Error. Jeśli typ błędu to fiber.Error, odpowiedź zostanie wysłana z użyciem podanego kodu stanu i wiadomości.
- Przykład
// Domyślny obsługiwacz błędów
var DefaultErrorHandler = func(c *fiber.Ctx, err error) error {
// Domyślny kod stanu to 500
code := fiber.StatusInternalServerError
// Jeśli to *fiber.Error, pobierz niestandardowy kod stanu
var e *fiber.Error
if errors.As(err, &e) {
code = e.Code
}
// Ustaw Content-Type: text/plain; charset=utf-8
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
// Zwróć kod stanu i wiadomość błędu
return c.Status(code).SendString(err.Error())
}
Niestandardowy obsługiwacz błędów
Możesz ustawić niestandardowy obsługiwacz błędów podczas inicjalizacji instancji Fibera za pomocą konfiguracji.
W większości przypadków domyślny obsługiwacz błędów powinien być wystarczający. Jednak jeśli chcesz przechwytywać różne rodzaje błędów i podejmować odpowiednie działania, takie jak wysyłanie powiadomień e-mailowych lub logowanie błędów do scentralizowanego systemu, to niestandardowy obsługiwacz błędów będzie bardzo przydatny. Możesz również wysyłać niestandardowe odpowiedzi do klienta, takie jak strony błędów lub tylko odpowiedź w formacie JSON.
Poniższy przykład pokazuje, jak wyświetlać strony błędów dla różnych rodzajów błędów.
- Przykład
// Utwórz nową instancję Fibera z niestandardową konfiguracją
app := fiber.New(fiber.Config{
// Zastąp domyślny obsługiwacz błędów
ErrorHandler: func(ctx *fiber.Ctx, err error) error {
// Domyślny kod stanu to 500
code := fiber.StatusInternalServerError
// Jeśli to *fiber.Error, pobierz niestandardowy kod stanu
var e *fiber.Error
if errors.As(err, &e) {
code = e.Code
}
// Wyślij niestandardową stronę błędu
err = ctx.Status(code).SendFile(fmt.Sprintf("./%d.html", code))
if err != nil {
// Jeśli SendFile nie powiedzie się
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
// Powrót z obsługiwacza
return nil
},
})
// ...