Skip to content

Commit 6b5023b

Browse files
committed
add: server: recover middleware
1 parent 629cfe8 commit 6b5023b

File tree

3 files changed

+43
-19
lines changed

3 files changed

+43
-19
lines changed

server/artisan/web.go

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package artisan
22

3-
import "github.com/kataras/iris/context"
3+
import (
4+
"errors"
5+
"fmt"
6+
"github.com/kataras/iris"
7+
"github.com/kataras/iris/context"
8+
)
49

510
func ApiHandler(handler func(ctx context.Context, param map[string]interface{}) (result interface{}, err error)) func(ctx context.Context) {
611

@@ -10,18 +15,6 @@ func ApiHandler(handler func(ctx context.Context, param map[string]interface{})
1015

1116
err := ctx.ReadJSON(&param)
1217
if err == nil {
13-
defer func() {
14-
if err := recover(); err != nil {
15-
if e1, ok := err.(error); !ok {
16-
panic(e1)
17-
}
18-
ctx.JSON(map[string]interface{}{
19-
"success": false,
20-
"message": err.(error).Error(),
21-
"code": ErrorFrom(err.(error)).Code(),
22-
})
23-
}
24-
}()
2518
result, err = handler(ctx, param)
2619
} else {
2720
err = NewError("decode input json error", -1, err)
@@ -41,3 +34,32 @@ func ApiHandler(handler func(ctx context.Context, param map[string]interface{})
4134
}
4235
}
4336
}
37+
38+
func ApiRecover(ctx context.Context) {
39+
defer func() {
40+
e := recover()
41+
if e != nil {
42+
// 转换为error
43+
var err error
44+
var appErr AppError
45+
var ok bool
46+
if err, ok = e.(error); !ok {
47+
err = errors.New(fmt.Sprint(e))
48+
}
49+
50+
// 转换为 app error
51+
if appErr, ok = e.(AppError); !ok {
52+
ctx.StatusCode(iris.StatusInternalServerError)
53+
appErr = NewError("internal server error", 500, err)
54+
}
55+
56+
ctx.JSON(map[string]interface{}{
57+
"success": false,
58+
"message": appErr.Error(),
59+
"code": appErr.Code(),
60+
})
61+
ctx.StopExecution()
62+
}
63+
}()
64+
ctx.Next()
65+
}

server/dao/user.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ type gson = map[string]interface{}
1111
var UserDao = &userDao{}
1212

1313
type UserModel struct {
14-
Uk string // 百度 uk
15-
MarkUsername string // 脱敏 用户名
16-
Username string `json:"username,omitempty"` // 用户名
17-
Avatar string
18-
IsVip bool
19-
IsSuperVip bool
14+
Uk string `json:"uk" bson:"uk"` // 百度 uk
15+
MarkUsername string `json:"mark_username" bson:"mark_username"` // 脱敏 用户名
16+
Username string `json:"username" bson:"username,omitempty"` // 用户名
17+
Avatar string `json:"avatar" bson:"avatar"`
18+
IsVip bool `json:"is_vip" bson:"is_vip"`
19+
IsSuperVip bool `json:"is_super_vip" bson:"is_super_vip"`
2020
}
2121

2222
type userDao struct{}

server/pan-light-server.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"github.com/kataras/iris"
55
"github.com/kataras/iris/context"
6+
"github.com/peterq/pan-light/server/artisan"
67
"github.com/peterq/pan-light/server/pc-api"
78
"log"
89
)
@@ -13,6 +14,7 @@ func main() {
1314
app.Get("/", func(ctx context.Context) {
1415
ctx.Write([]byte("Hello pan-light"))
1516
})
17+
app.Use(artisan.ApiRecover)
1618
pc_api.Init(app)
1719
app.Run(iris.Addr("127.0.0.1:8081"))
1820
}

0 commit comments

Comments
 (0)