package core import ( "fmt" "git.echol.cn/loser/logger/log" "github.com/gin-gonic/gin" "net" "net/http" "os" "strings" ) // NoMethodHandler 请求方式不对 func NoMethodHandler() gin.HandlerFunc { return func(ctx *gin.Context) { R(ctx).FailWithMessageAndCode(fmt.Sprintf("不支持%v请求", ctx.Request.Method), http.StatusMethodNotAllowed) ctx.Abort() } } // NoRouteHandler 404异常处理 func NoRouteHandler() gin.HandlerFunc { return func(ctx *gin.Context) { R(ctx).FailWithMessageAndCode("请求接口不存在", http.StatusNotFound) ctx.Abort() } } // Recovery Panic捕获 func Recovery() gin.HandlerFunc { return func(ctx *gin.Context) { defer func() { if err := recover(); err != nil { log.Errorf("系统错误: %v", err) var brokenPipe bool if ne, ok := err.(*net.OpError); ok { if se, ok := ne.Err.(*os.SyscallError); ok { if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") { brokenPipe = true } } } if brokenPipe { log.Errorf("%s", err) } R(ctx).FailWithMessage("服务器异常,请联系管理员") ctx.Abort() } }() ctx.Next() } }