Files
platform/web/error.go

55 lines
1.2 KiB
Go
Raw Normal View History

2025-03-18 17:57:07 +08:00
package web
import (
"errors"
"log/slog"
"platform/web/auth"
"platform/web/core"
"reflect"
2025-03-18 17:57:07 +08:00
"github.com/gofiber/fiber/v2"
)
func ErrorHandler(c *fiber.Ctx, err error) error {
var code = fiber.StatusInternalServerError
var message = "服务器异常"
var fiberErr *fiber.Error
var authErr auth.AuthenticationErr
var bizErr *core.BizErr
switch {
// fiber 错误
case errors.As(err, &fiberErr):
code = fiberErr.Code
message = fiberErr.Message
// 认证授权错误
case errors.As(err, &authErr):
switch {
case errors.Is(err, auth.ErrUnauthorize):
code = fiber.StatusUnauthorized
case errors.Is(err, auth.ErrForbidden):
code = fiber.StatusForbidden
default:
code = fiber.StatusBadRequest
}
message = err.Error()
// 服务错误
case errors.As(err, &bizErr):
code = fiber.StatusBadRequest
message = err.Error()
slog.Debug("服务错误", slog.Any(slog.SourceKey, bizErr.Source()))
// 所有未手动声明的错误类型
default:
slog.Warn("未处理的异常", slog.String("type", reflect.TypeOf(err).Name()), slog.String("error", err.Error()))
2025-03-18 17:57:07 +08:00
}
2025-03-18 17:57:07 +08:00
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
return c.Status(code).SendString(message)
}