提交 6b5023bd 编写于 作者: P peterq

add: server: recover middleware

上级 629cfe86
package artisan
import "github.com/kataras/iris/context"
import (
"errors"
"fmt"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
)
func ApiHandler(handler func(ctx context.Context, param map[string]interface{}) (result interface{}, err error)) func(ctx context.Context) {
......@@ -10,18 +15,6 @@ func ApiHandler(handler func(ctx context.Context, param map[string]interface{})
err := ctx.ReadJSON(&param)
if err == nil {
defer func() {
if err := recover(); err != nil {
if e1, ok := err.(error); !ok {
panic(e1)
}
ctx.JSON(map[string]interface{}{
"success": false,
"message": err.(error).Error(),
"code": ErrorFrom(err.(error)).Code(),
})
}
}()
result, err = handler(ctx, param)
} else {
err = NewError("decode input json error", -1, err)
......@@ -41,3 +34,32 @@ func ApiHandler(handler func(ctx context.Context, param map[string]interface{})
}
}
}
func ApiRecover(ctx context.Context) {
defer func() {
e := recover()
if e != nil {
// 转换为error
var err error
var appErr AppError
var ok bool
if err, ok = e.(error); !ok {
err = errors.New(fmt.Sprint(e))
}
// 转换为 app error
if appErr, ok = e.(AppError); !ok {
ctx.StatusCode(iris.StatusInternalServerError)
appErr = NewError("internal server error", 500, err)
}
ctx.JSON(map[string]interface{}{
"success": false,
"message": appErr.Error(),
"code": appErr.Code(),
})
ctx.StopExecution()
}
}()
ctx.Next()
}
......@@ -11,12 +11,12 @@ type gson = map[string]interface{}
var UserDao = &userDao{}
type UserModel struct {
Uk string // 百度 uk
MarkUsername string // 脱敏 用户名
Username string `json:"username,omitempty"` // 用户名
Avatar string
IsVip bool
IsSuperVip bool
Uk string `json:"uk" bson:"uk"` // 百度 uk
MarkUsername string `json:"mark_username" bson:"mark_username"` // 脱敏 用户名
Username string `json:"username" bson:"username,omitempty"` // 用户名
Avatar string `json:"avatar" bson:"avatar"`
IsVip bool `json:"is_vip" bson:"is_vip"`
IsSuperVip bool `json:"is_super_vip" bson:"is_super_vip"`
}
type userDao struct{}
......
......@@ -3,6 +3,7 @@ package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/peterq/pan-light/server/artisan"
"github.com/peterq/pan-light/server/pc-api"
"log"
)
......@@ -13,6 +14,7 @@ func main() {
app.Get("/", func(ctx context.Context) {
ctx.Write([]byte("Hello pan-light"))
})
app.Use(artisan.ApiRecover)
pc_api.Init(app)
app.Run(iris.Addr("127.0.0.1:8081"))
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册