完善错误处理逻辑,统一使用 BizErr 包装业务错误,提供打印源码跳转并返回合适的 http 状态码
This commit is contained in:
24
web/error.go
24
web/error.go
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user