完善错误处理逻辑,统一使用 BizErr 包装业务错误,提供打印源码跳转并返回合适的 http 状态码

This commit is contained in:
2025-05-24 12:37:16 +08:00
parent 928d78d41b
commit 1e7b5777a2
11 changed files with 203 additions and 87 deletions

View File

@@ -2,8 +2,9 @@ package web
import (
"errors"
"gorm.io/gorm"
"log/slog"
"platform/web/auth"
"platform/web/core"
"reflect"
"github.com/gofiber/fiber/v2"
@@ -15,6 +16,8 @@ func ErrorHandler(c *fiber.Ctx, err error) error {
var message = "服务器异常"
var fiberErr *fiber.Error
var authErr auth.AuthenticationErr
var bizErr *core.BizErr
switch {
@@ -23,8 +26,23 @@ func ErrorHandler(c *fiber.Ctx, err error) error {
code = fiberErr.Code
message = fiberErr.Message
// gorm 错误,忽略
case errors.Is(err, gorm.ErrForeignKeyViolated):
// 认证授权错误
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: