mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 15:10:55 +00:00
Improve unhandled error handling in prod mode
This commit is contained in:
parent
32d9d13dc7
commit
d79977977d
22
router.go
22
router.go
@ -368,8 +368,8 @@ func (p *ControllerRegistor) ServeHTTP(rw http.ResponseWriter, r *http.Request)
|
||||
if _, ok := err.(middleware.HTTPException); ok {
|
||||
// catch intented errors, only for HTTP 4XX and 5XX
|
||||
} else {
|
||||
errstr := fmt.Sprint(err)
|
||||
if handler, ok := middleware.ErrorMaps[errstr]; ok && ErrorsShow {
|
||||
if ErrorsShow {
|
||||
handler := p.getErrorHandler(fmt.Sprint(err))
|
||||
handler(rw, r)
|
||||
} else {
|
||||
if !RecoverPanic {
|
||||
@ -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
|
||||
//started set to true if response was written to then don't execute other handler
|
||||
type responseWriter struct {
|
||||
|
Loading…
Reference in New Issue
Block a user