Files
xinmi/internal/middleware/error_handler.go
T

49 lines
1.0 KiB
Go
Raw Normal View History

package middleware
import (
stderrors "errors"
"net/http"
"github.com/gin-gonic/gin"
"github.com/Tencent/WeKnora/internal/errors"
)
// ErrorHandler 是一个处理应用错误的中间件
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
// 处理请求
c.Next()
// 检查是否有错误
if len(c.Errors) > 0 && !c.Writer.Written() {
// 获取最后一个错误
err := c.Errors.Last().Err
// 检查是否为应用错误
var appErr *errors.AppError
if stderrors.As(err, &appErr) && appErr.HTTPCode >= 400 && appErr.HTTPCode <= 599 {
// 返回应用错误
c.JSON(appErr.HTTPCode, gin.H{
"success": false,
"error": gin.H{
"code": appErr.Code,
"message": appErr.Message,
"details": appErr.Details,
},
})
return
}
// 处理其他类型的错误
c.JSON(http.StatusInternalServerError, gin.H{
"success": false,
"error": gin.H{
"code": errors.ErrInternalServer,
"message": "Internal server error",
},
})
}
}
}