package web import ( "errors" "log/slog" "platform/web/auth" "platform/web/core" "reflect" "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.AuthErr var bizErr *core.BizErr var servErr *core.ServErr switch { // fiber 错误 case errors.As(err, &fiberErr): code = fiberErr.Code message = fiberErr.Message // 认证授权错误 case errors.As(err, &authErr): switch { case errors.Is(err, auth.ErrAuthenticateUnauthorize): code = fiber.StatusUnauthorized case errors.Is(err, auth.ErrAuthenticateForbidden): code = fiber.StatusForbidden default: code = fiber.StatusBadRequest } message = err.Error() // 已处理的业务错误 case errors.As(err, &bizErr): code = fiber.StatusBadRequest message = err.Error() case errors.As(err, &servErr): code = fiber.StatusInternalServerError message = err.Error() // 所有未手动声明的错误类型 default: slog.Warn("未处理的异常", slog.String("type", reflect.TypeOf(err).Name()), slog.String("error", err.Error())) } c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8) return c.Status(code).SendString(message) }