-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy patherror_handler.go
44 lines (38 loc) · 1020 Bytes
/
error_handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package echox
import (
"net/http"
"github.com/go-playground/validator/v10"
"github.com/goexl/exc"
"github.com/goexl/gox"
"github.com/goexl/xiren"
"github.com/labstack/echo/v4"
)
type errorHandler func(err error, ctx echo.Context)
func errorHandlerFunc(err error, ctx echo.Context) {
rsp := response{}
statusCode := http.StatusInternalServerError
switch e := err.(type) {
case *echo.HTTPError:
statusCode = e.Code
rsp.ErrorCode = 9902
rsp.Message = `处理请求失败`
if nil != e.Internal {
rsp.Data = e.Internal.Error()
}
case validator.ValidationErrors:
statusCode = http.StatusBadRequest
lang := ctx.Request().Header.Get(gox.HeaderAcceptLanguage)
rsp.ErrorCode = 9901
rsp.Message = `数据验证错误`
rsp.Data = xiren.Localization(lang, e)
case exc.Exception:
rsp.ErrorCode = e.Code()
rsp.Message = e.Message()
rsp.Data = e.Fields()
default:
rsp.ErrorCode = 9903
rsp.Message = "服务器内部错误"
rsp.Data = err.Error()
}
_ = ctx.JSON(statusCode, rsp)
}