异常处理
说明
在框架中如果一但调用了 panic()
就会被内置的异常处理中间件捕获并通过 ctx.Fail()
将错误以json的形式返回
// recoveryMiddleware 全局异常捕获中间件
func recoveryMiddleware() HandlerFunc {
return func(ctx *Context) {
defer func() {
if err := recover(); err != nil {
if e, ok := err.(Exception); ok {
jsonStr, _ := json.Marshal(e)
tglog.Log().Error(string(jsonStr))
ctx.Fail(e.Message, FailOption{
StatusCode: e.StateCode,
ErrorCode: e.ErrorCode,
})
} else {
fmt.Println(err)
}
}
}()
ctx.Next()
}
}
// recoveryMiddleware 全局异常捕获中间件
func recoveryMiddleware() HandlerFunc {
return func(ctx *Context) {
defer func() {
if err := recover(); err != nil {
if e, ok := err.(Exception); ok {
jsonStr, _ := json.Marshal(e)
tglog.Log().Error(string(jsonStr))
ctx.Fail(e.Message, FailOption{
StatusCode: e.StateCode,
ErrorCode: e.ErrorCode,
})
} else {
fmt.Println(err)
}
}
}()
ctx.Next()
}
}
如何您想抛出一个异常,并且让前端可以看到,可以这样写
panic(tg.Exception{
StateCode: 401,
ErrorCode: 10002,
Message: "遇到了一个错误",
Error: err,
})
panic(tg.Exception{
StateCode: 401,
ErrorCode: 10002,
Message: "遇到了一个错误",
Error: err,
})
常用错误码
var ErrorCode = &errorCode{
VALIDATE: 10001, // 验证类错误
TokenExpire: 10002, // Token过期
EXCEPTION: 20001, // 服务或代码异常类错误
MySqlError: 20002, // mysql错误
RedisError: 20003, // redis错误
}
var ErrorCode = &errorCode{
VALIDATE: 10001, // 验证类错误
TokenExpire: 10002, // Token过期
EXCEPTION: 20001, // 服务或代码异常类错误
MySqlError: 20002, // mysql错误
RedisError: 20003, // redis错误
}