2025-03-18 17:57:07 +08:00
|
|
|
package web
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
2025-05-09 11:10:17 +08:00
|
|
|
"gorm.io/gorm"
|
2025-04-19 14:59:19 +08:00
|
|
|
"log/slog"
|
|
|
|
|
"reflect"
|
2025-03-18 17:57:07 +08:00
|
|
|
|
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func ErrorHandler(c *fiber.Ctx, err error) error {
|
2025-04-19 14:59:19 +08:00
|
|
|
|
2025-05-09 11:10:17 +08:00
|
|
|
var code = fiber.StatusInternalServerError
|
|
|
|
|
var message = "服务器异常"
|
2025-04-19 14:59:19 +08:00
|
|
|
|
|
|
|
|
var fiberErr *fiber.Error
|
2025-05-09 11:10:17 +08:00
|
|
|
|
|
|
|
|
switch {
|
|
|
|
|
|
|
|
|
|
// fiber 错误
|
|
|
|
|
case errors.As(err, &fiberErr):
|
2025-04-19 14:59:19 +08:00
|
|
|
code = fiberErr.Code
|
|
|
|
|
message = fiberErr.Message
|
2025-05-09 11:10:17 +08:00
|
|
|
|
|
|
|
|
// gorm 错误,忽略
|
|
|
|
|
case errors.Is(err, gorm.ErrForeignKeyViolated):
|
|
|
|
|
|
|
|
|
|
// 所有未手动声明的错误类型
|
|
|
|
|
default:
|
2025-04-19 14:59:19 +08:00
|
|
|
slog.Debug("未处理的异常", slog.String("type", reflect.TypeOf(err).Name()), slog.String("error", err.Error()))
|
2025-03-18 17:57:07 +08:00
|
|
|
}
|
2025-04-19 14:59:19 +08:00
|
|
|
|
2025-03-18 17:57:07 +08:00
|
|
|
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
|
|
|
|
|
return c.Status(code).SendString(message)
|
|
|
|
|
}
|