首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"cloudnest/internal/pkg/errors"
|
||||
"cloudnest/internal/pkg/response"
|
||||
"cloudnest/internal/pkg/logger"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// ErrorHandler creates a middleware that handles errors and panics.
|
||||
// ErrorHandler 创建一个处理错误和 panic 的中间件。
|
||||
//
|
||||
// This middleware:
|
||||
// 1. Recovers from panics and logs the error.
|
||||
// 2. Handles errors stored in the Gin context after processing.
|
||||
// 3. Formats consistent error responses.
|
||||
//
|
||||
// Returns:
|
||||
// - gin.HandlerFunc: The error handling middleware handler.
|
||||
//
|
||||
// Note:
|
||||
// - Should be added as the first middleware to catch all panics.
|
||||
// - Uses the custom response package for consistent error formatting.
|
||||
//
|
||||
// 此中间件:
|
||||
// 1. 从 panic 中恢复并记录错误。
|
||||
// 2. 处理处理后存储在 Gin 上下文中的错误。
|
||||
// 3. 格式化一致的错误响应。
|
||||
//
|
||||
// 返回值:
|
||||
// - gin.HandlerFunc: 错误处理中间件处理器。
|
||||
//
|
||||
// 注意:
|
||||
// - 应该作为第一个中间件添加以捕获所有 panic。
|
||||
// - 使用自定义的 response 包进行一致的错误格式化。
|
||||
func ErrorHandler() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
logger.Error("panic recovered", "error", err)
|
||||
response.InternalError(c, "服务器内部错误")
|
||||
}
|
||||
}()
|
||||
|
||||
c.Next()
|
||||
|
||||
if len(c.Errors) > 0 {
|
||||
err := c.Errors.Last().Err
|
||||
if appErr, ok := errors.AsAppError(err); ok {
|
||||
response.Error(c, appErr.Code, appErr.Message)
|
||||
} else {
|
||||
logger.Error("request error", "error", err)
|
||||
response.InternalError(c, err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user