Commit d7997797 authored by vadimi's avatar vadimi

Improve unhandled error handling in prod mode

parent 32d9d13d
...@@ -368,8 +368,8 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request) ...@@ -368,8 +368,8 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
if _, ok := err.(middleware.HTTPException); ok { if _, ok := err.(middleware.HTTPException); ok {
// catch intented errors, only for HTTP 4XX and 5XX // catch intented errors, only for HTTP 4XX and 5XX
} else { } else {
errstr := fmt.Sprint(err) if ErrorsShow {
if handler, ok := middleware.ErrorMaps[errstr]; ok && ErrorsShow { handler := p.getErrorHandler(fmt.Sprint(err))
handler(rw, r) handler(rw, r)
} else { } else {
if !RecoverPanic { if !RecoverPanic {
...@@ -865,6 +865,24 @@ Admin: ...@@ -865,6 +865,24 @@ Admin:
} }
} }
// there always should be error handler that sets error code accordingly for all unhandled errors
// in order to have custom UI for error page it's necessary to override "500" error
func (p *ControllerRegistor) getErrorHandler(errorCode string) func(rw http.ResponseWriter, r *http.Request) {
handler := middleware.SimpleServerError
ok := true
if errorCode != "" {
handler, ok = middleware.ErrorMaps[errorCode]
if !ok {
handler, ok = middleware.ErrorMaps["500"]
}
if !ok || handler == nil {
handler = middleware.SimpleServerError
}
}
return handler
}
//responseWriter is a wrapper for the http.ResponseWriter //responseWriter is a wrapper for the http.ResponseWriter
//started set to true if response was written to then don't execute other handler //started set to true if response was written to then don't execute other handler
type responseWriter struct { type responseWriter struct {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment