40 lines
832 B
Go
40 lines
832 B
Go
package middleware
|
||
|
||
import (
|
||
"github.com/gin-gonic/gin"
|
||
"net/http"
|
||
"runtime/debug"
|
||
"skapp/pkg/logger"
|
||
"skapp/pkg/utils/errorx"
|
||
)
|
||
|
||
// ErrorHandler
|
||
// gin 全局异常处理
|
||
func ErrorHandler() gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
defer func() {
|
||
if r := recover(); r != nil {
|
||
err := parseError(r)
|
||
//打印错误堆栈信息
|
||
logger.Log.Error(err)
|
||
debug.PrintStack()
|
||
//封装通用JSON返回
|
||
c.JSON(http.StatusOK, errorx.NewDefaultError(err))
|
||
//终止后续接口调用,不加的话recover到异常后,还会继续执行接口里后续代码
|
||
c.Abort()
|
||
}
|
||
}()
|
||
//加载完 defer recover,继续后续的插件及代码执行
|
||
c.Next()
|
||
}
|
||
}
|
||
|
||
func parseError(r interface{}) string {
|
||
switch v := r.(type) {
|
||
case error:
|
||
return v.Error()
|
||
default:
|
||
return r.(string)
|
||
}
|
||
}
|