online_code/core/error_handle.go
2022-05-25 17:30:46 +08:00

53 lines
1.2 KiB
Go

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()
}
}