mirror of
https://github.com/labstack/echo.git
synced 2025-09-16 09:16:29 +02:00
Fix DefaultHTTPErrorHandler with Debug=true (#1477)
This commit is contained in:
10
echo.go
10
echo.go
@@ -362,10 +362,12 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) {
|
||||
// Issue #1426
|
||||
code := he.Code
|
||||
message := he.Message
|
||||
if e.Debug {
|
||||
message = err.Error()
|
||||
} else if m, ok := message.(string); ok {
|
||||
message = Map{"message": m}
|
||||
if m, ok := he.Message.(string); ok {
|
||||
if e.Debug {
|
||||
message = Map{"message": m, "error": err.Error()}
|
||||
} else {
|
||||
message = Map{"message": m}
|
||||
}
|
||||
}
|
||||
|
||||
// Send response
|
||||
|
43
echo_test.go
43
echo_test.go
@@ -568,6 +568,49 @@ func TestHTTPError(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestDefaultHTTPErrorHandler(t *testing.T) {
|
||||
e := New()
|
||||
e.Debug = true
|
||||
e.Any("/plain", func(c Context) error {
|
||||
return errors.New("An error occurred")
|
||||
})
|
||||
e.Any("/badrequest", func(c Context) error {
|
||||
return NewHTTPError(http.StatusBadRequest, "Invalid request")
|
||||
})
|
||||
e.Any("/servererror", func(c Context) error {
|
||||
return NewHTTPError(http.StatusInternalServerError, map[string]interface{}{
|
||||
"code": 33,
|
||||
"message": "Something bad happened",
|
||||
"error": "stackinfo",
|
||||
})
|
||||
})
|
||||
// With Debug=true plain response contains error message
|
||||
c, b := request(http.MethodGet, "/plain", e)
|
||||
assert.Equal(t, http.StatusInternalServerError, c)
|
||||
assert.Equal(t, "{\n \"error\": \"An error occurred\",\n \"message\": \"Internal Server Error\"\n}\n", b)
|
||||
// and special handling for HTTPError
|
||||
c, b = request(http.MethodGet, "/badrequest", e)
|
||||
assert.Equal(t, http.StatusBadRequest, c)
|
||||
assert.Equal(t, "{\n \"error\": \"code=400, message=Invalid request\",\n \"message\": \"Invalid request\"\n}\n", b)
|
||||
// complex errors are serialized to pretty JSON
|
||||
c, b = request(http.MethodGet, "/servererror", e)
|
||||
assert.Equal(t, http.StatusInternalServerError, c)
|
||||
assert.Equal(t, "{\n \"code\": 33,\n \"error\": \"stackinfo\",\n \"message\": \"Something bad happened\"\n}\n", b)
|
||||
|
||||
e.Debug = false
|
||||
// With Debug=false the error response is shortened
|
||||
c, b = request(http.MethodGet, "/plain", e)
|
||||
assert.Equal(t, http.StatusInternalServerError, c)
|
||||
assert.Equal(t, "{\"message\":\"Internal Server Error\"}\n", b)
|
||||
c, b = request(http.MethodGet, "/badrequest", e)
|
||||
assert.Equal(t, http.StatusBadRequest, c)
|
||||
assert.Equal(t, "{\"message\":\"Invalid request\"}\n", b)
|
||||
// No difference for error response with non plain string errors
|
||||
c, b = request(http.MethodGet, "/servererror", e)
|
||||
assert.Equal(t, http.StatusInternalServerError, c)
|
||||
assert.Equal(t, "{\"code\":33,\"error\":\"stackinfo\",\"message\":\"Something bad happened\"}\n", b)
|
||||
}
|
||||
|
||||
func TestEchoClose(t *testing.T) {
|
||||
e := New()
|
||||
errCh := make(chan error)
|
||||
|
Reference in New Issue
Block a user