44 "context"
55 "fmt"
66 "net/http"
7+ "strconv"
78 "strings"
89 "time"
910
@@ -107,14 +108,33 @@ func sortMap(ctx context.Context, body []byte, res *gmap.ListMap, ret model.Map)
107108 return reqSortMap
108109}
109110
111+ func try (ctx context.Context , try func (ctx context.Context ) error ) (err error ) {
112+ defer func () {
113+ if exception := recover (); exception != nil {
114+ if v , ok := exception .(error ); ok && gerror .HasStack (v ) {
115+ err = v
116+ } else {
117+ err = gerror .Newf (`%+v` , exception )
118+ }
119+ }
120+ }()
121+ err = try (ctx )
122+ return
123+ }
124+
125+ type CodeErr interface {
126+ Code () int
127+ Error () string
128+ }
129+
110130func CommonResponse (handler func (ctx context.Context , req model.Map ) (res model.Map , err error ), mode Mode , debug bool ) func (req * ghttp.Request ) {
111131 return func (req * ghttp.Request ) {
112132 metaRes := & gmap.ListMap {}
113133 code := 200
114134 msg := "success"
115135 nodeRes := & gmap.ListMap {}
116136
117- err := g . Try (req .Context (), func (ctx context.Context ) {
137+ err := try (req .Context (), func (ctx context.Context ) ( err error ) {
118138
119139 ret , err := handler (ctx , req .GetMap ())
120140
@@ -125,28 +145,33 @@ func CommonResponse(handler func(ctx context.Context, req model.Map) (res model.
125145 nodeRes .Set (k , v )
126146 }
127147 }
128-
129- if err != nil {
130- panic (err )
131- }
132-
148+ return
133149 })
134150
135151 if err != nil {
136152
137- if e , ok := err .(consts. Err ); ok {
153+ if e , ok := err .(CodeErr ); ok {
138154 code = e .Code ()
155+ if strconv .Itoa (e .Code ())[0 ] == '4' {
156+ code = e .Code ()
157+ msg = e .Error ()
158+ } else {
159+ code = 500
160+ msg = "系统异常"
161+ }
139162 } else {
140163 code = 500
164+ msg = "系统异常"
141165 }
142166
143- msg = err . Error ()
144-
145- if e , ok := err .( * gerror. Error ); ok {
146- g . Log (). Stack ( false ). Error ( req . Context (), err , e . Stack ())
147- } else {
148- g . Log (). Stack ( false ). Error ( req . Context (), err )
167+ if code >= 500 {
168+ if e , ok := err .( * gerror. Error ); ok {
169+ g . Log (). Stack ( false ). Error ( req . Context (), err , e . Stack ())
170+ } else {
171+ g . Log (). Stack ( false ). Error ( req . Context (), err )
172+ }
149173 }
174+
150175 }
151176
152177 metaRes .Set ("ok" , code == 200 )
0 commit comments