Commit fda84120 authored by astaxie's avatar astaxie

fix #893

parent 57e62e5e
...@@ -31,6 +31,7 @@ import ( ...@@ -31,6 +31,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/astaxie/beego"
"github.com/astaxie/beego/middleware" "github.com/astaxie/beego/middleware"
"github.com/astaxie/beego/utils" "github.com/astaxie/beego/utils"
) )
...@@ -69,7 +70,8 @@ func (ctx *Context) Abort(status int, body string) { ...@@ -69,7 +70,8 @@ func (ctx *Context) Abort(status int, body string) {
panic(e) panic(e)
} }
// last panic user string // last panic user string
panic(body) ctx.ResponseWriter.Write([]byte(body))
panic(beego.USERSTOPRUN)
} }
// Write string to response body. // Write string to response body.
......
...@@ -831,7 +831,9 @@ func (p *ControllerRegistor) recoverPanic(rw http.ResponseWriter, r *http.Reques ...@@ -831,7 +831,9 @@ func (p *ControllerRegistor) recoverPanic(rw http.ResponseWriter, r *http.Reques
if err == USERSTOPRUN { if err == USERSTOPRUN {
return return
} }
if _, ok := err.(middleware.HTTPException); ok { if he, ok := err.(middleware.HTTPException); ok {
rw.WriteHeader(he.StatusCode)
rw.Write([]byte(he.Description))
// catch intented errors, only for HTTP 4XX and 5XX // catch intented errors, only for HTTP 4XX and 5XX
} else { } else {
if RunMode == "dev" { if RunMode == "dev" {
...@@ -863,9 +865,10 @@ func (p *ControllerRegistor) recoverPanic(rw http.ResponseWriter, r *http.Reques ...@@ -863,9 +865,10 @@ func (p *ControllerRegistor) recoverPanic(rw http.ResponseWriter, r *http.Reques
} else { } else {
// in production model show all infomation // in production model show all infomation
if ErrorsShow { if ErrorsShow {
handler := p.getErrorHandler(fmt.Sprint(err)) if handler, ok := middleware.ErrorMaps[fmt.Sprint(err)]; ok {
handler(rw, r) handler(rw, r)
return return
}
} else { } else {
Critical("the request url is ", r.URL.Path) Critical("the request url is ", r.URL.Path)
Critical("Handler crashed with error", err) Critical("Handler crashed with error", err)
...@@ -884,24 +887,6 @@ func (p *ControllerRegistor) recoverPanic(rw http.ResponseWriter, r *http.Reques ...@@ -884,24 +887,6 @@ func (p *ControllerRegistor) recoverPanic(rw http.ResponseWriter, r *http.Reques
} }
} }
// 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