Penanganan Kesalahan
Menjamin bahwa Fiber menangkap semua kesalahan yang terjadi saat menjalankan pengendali rute dan middleware sangat penting. Anda harus mengembalikannya ke fungsi pengendali agar Fiber dapat menangkap dan memprosesnya.
- Contoh
app.Get("/", func(c *fiber.Ctx) error {
// Teruskan kesalahan ke Fiber
return c.SendFile("file-tidak-ada")
})
Secara default, Fiber tidak menangani kesalahan panic. Untuk pulih dari panic yang dihasilkan oleh pengendali dalam tumpukan dan menghindari kegagalan program Go, Anda perlu menyertakan middleware Recover
seperti yang ditunjukkan di bawah ini:
- Contoh
package main
import (
"log"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/recover"
)
func main() {
app := fiber.New()
// Gunakan middleware recover untuk menangkap kesalahan panic
app.Use(recover.New())
app.Get("/", func(c *fiber.Ctx) error {
panic("Panic ini ditangkap oleh fiber")
})
log.Fatal(app.Listen(":3000"))
}
Anda dapat menggunakan struktur kesalahan kustom Fiber dengan fiber.NewError()
untuk meneruskan kode status tambahan. Melewatkan pesan bersifat opsional; jika dikosongkan, itu akan berasal dari pesan kode status (misalnya, 404
sama dengan Tidak Ditemukan
).
- Contoh
app.Get("/", func(c *fiber.Ctx) error {
// 503 Layanan Tidak Tersedia
return fiber.ErrServiceUnavailable
// 503 Sedang berlibur!
return fiber.NewError(fiber.StatusServiceUnavailable, "Sedang berlibur!")
})
Penangan Kesalahan Default
Fiber menyediakan penangan kesalahan default. Untuk kesalahan standar, respons akan dikirimkan sebagai 500 Kesalahan Internal Server. Jika jenis kesalahan adalah fiber.Error, respons akan dikirimkan menggunakan kode status dan pesan yang disediakan.
- Contoh
// Penangan kesalahan default
var DefaultErrorHandler = func(c *fiber.Ctx, err error) error {
// Kode status default adalah 500
code := fiber.StatusInternalServerError
// Jika itu *fiber.Error, ambil kode status kustom
var e *fiber.Error
if errors.As(err, &e) {
code = e.Code
}
// Atur Content-Type: text/plain; charset=utf-8
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
// Kembalikan kode status dan pesan kesalahan
return c.Status(code).SendString(err.Error())
}
Penangan Kesalahan Kustom
Anda dapat mengatur penangan kesalahan kustom saat menginisialisasi instansi Fiber menggunakan Konfig.
Dalam kebanyakan kasus, penangan kesalahan default seharusnya sudah cukup. Namun, jika Anda ingin menangkap berbagai jenis kesalahan dan mengambil tindakan yang sesuai, seperti mengirimkan email pemberitahuan atau mencatat kesalahan ke sistem terpusat, maka penangan kesalahan kustom akan sangat berguna. Anda juga dapat mengirimkan respons kustom ke klien, seperti halaman kesalahan atau respons JSON.
Contoh berikut menunjukkan bagaimana menampilkan halaman kesalahan untuk berbagai jenis kesalahan.
- Contoh
// Buat instansi Fiber baru dengan konfigurasi kustom
app := fiber.New(fiber.Config{
// Melakukan override terhadap penangan kesalahan default
ErrorHandler: func(ctx *fiber.Ctx, err error) error {
// Kode status default adalah 500
code := fiber.StatusInternalServerError
// Jika itu *fiber.Error, ambil kode status kustom
var e *fiber.Error
if errors.As(err, &e) {
code = e.Code
}
// Kirim halaman kesalahan kustom
err = ctx.Status(code).SendFile(fmt.Sprintf("./%d.html", code))
if err != nil {
// Jika SendFile gagal
return ctx.Status(fiber.StatusInternalServerError).SendString("Kesalahan Internal Server")
}
// Kembalikan dari pengendali
return nil
},
})
// ...