全书目录

第三十三篇:Fiber 完全指南 —— 极简高压快线城区宇宙

第十二章:错误处理 —— 事故中心怎么接警

1 分钟 346 字 第 623 / 962 个阅读单元

Fiber 的错误模型很舒服:

handler 和 middleware 返回 error,交给统一事故中心处理。

go
app.Get("/file", func(c fiber.Ctx) error {
    return c.SendFile("./not-exist.txt")
})

这里如果出错,不是你每个 handler 自己 fmt.Println 一通,而是走 Fiber 的统一错误通路。


#1. panic 默认不会自动兜住

Fiber 官方 Error Handling 文档特别强调:

Fiber 默认不会自动 recover panic。

所以你要显式加:

go
import recoverer "github.com/gofiber/fiber/v3/middleware/recover"

app.Use(recoverer.New())

如果没有这道“事故缓冲护栏”,某个 handler panic,你就可能直接出严重问题。


#2. 自定义 ErrorHandler 才是真实项目的标配
go
app := fiber.New(fiber.Config{
    ErrorHandler: func(c fiber.Ctx, err error) error {
        code := fiber.StatusInternalServerError

        var e *fiber.Error
        if errors.As(err, &e) {
            code = e.Code
        }

        return c.Status(code).JSON(fiber.Map{
            "code":    code,
            "message": err.Error(),
        })
    },
})

这就相当于你在快线城区里建了一个统一事故中心:

  • 先判断事故等级
  • 再决定对外口径
  • 再统一输出回执

这样你的 handler 就能干净很多:

go
app.Get("/users/:id", func(c fiber.Ctx) error {
    id := c.Params("id")
    if id == "0" {
        return fiber.NewError(fiber.StatusBadRequest, "invalid id")
    }
    return c.JSON(fiber.Map{"id": id})
})