11package 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
510func 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+ }
0 commit comments