package web import ( "errors" "gorm.io/gorm" "log/slog" "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 serviceErr *core.ServiceErr switch { // fiber 错误 case errors.As(err, &fiberErr): code = fiberErr.Code message = fiberErr.Message // 服务错误 case errors.As(err, &serviceErr): code = serviceErr.Code() message = serviceErr.Error() // gorm 错误,忽略 case errors.Is(err, gorm.ErrForeignKeyViolated): // 所有未手动声明的错误类型 default: slog.Debug("未处理的异常", slog.String("type", reflect.TypeOf(err).Name()), slog.String("error", err.Error())) } c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8) return c.Status(code).SendString(message) }