mirror of https://github.com/gofiber/fiber.git
🚀 Improve error handling for net error(s) (#2421)
* improve error handling for net error(s) fixes: reverse proxy support #2419 * Update app.go Co-authored-by: leonklingele <git@leonklingele.de> * improve error handling for net error(s) fixes: reverse proxy support #2419 * improve error handling for net error(s) fixes: reverse proxy support #2419 * improve error handling for net error(s) fixes: reverse proxy support #2419 --------- Co-authored-by: leonklingele <git@leonklingele.de>pull/2426/head
parent
c4d2876d64
commit
9feaf2296e
7
app.go
7
app.go
|
@ -1052,13 +1052,18 @@ func (app *App) serverErrorHandler(fctx *fasthttp.RequestCtx, err error) {
|
||||||
c := app.AcquireCtx(fctx)
|
c := app.AcquireCtx(fctx)
|
||||||
defer app.ReleaseCtx(c)
|
defer app.ReleaseCtx(c)
|
||||||
|
|
||||||
var errNetOP *net.OpError
|
var (
|
||||||
|
errNetOP *net.OpError
|
||||||
|
netErr net.Error
|
||||||
|
)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case errors.As(err, new(*fasthttp.ErrSmallBuffer)):
|
case errors.As(err, new(*fasthttp.ErrSmallBuffer)):
|
||||||
err = ErrRequestHeaderFieldsTooLarge
|
err = ErrRequestHeaderFieldsTooLarge
|
||||||
case errors.As(err, &errNetOP) && errNetOP.Timeout():
|
case errors.As(err, &errNetOP) && errNetOP.Timeout():
|
||||||
err = ErrRequestTimeout
|
err = ErrRequestTimeout
|
||||||
|
case errors.As(err, &netErr):
|
||||||
|
err = ErrBadGateway
|
||||||
case errors.Is(err, fasthttp.ErrBodyTooLarge):
|
case errors.Is(err, fasthttp.ErrBodyTooLarge):
|
||||||
err = ErrRequestEntityTooLarge
|
err = ErrRequestEntityTooLarge
|
||||||
case errors.Is(err, fasthttp.ErrGetOnly):
|
case errors.Is(err, fasthttp.ErrGetOnly):
|
||||||
|
|
14
app_test.go
14
app_test.go
|
@ -268,6 +268,20 @@ func Test_App_serverErrorHandler_Internal_Error(t *testing.T) {
|
||||||
utils.AssertEqual(t, c.fasthttp.Response.StatusCode(), StatusBadRequest)
|
utils.AssertEqual(t, c.fasthttp.Response.StatusCode(), StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_App_serverErrorHandler_Network_Error(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
app := New()
|
||||||
|
c := app.AcquireCtx(&fasthttp.RequestCtx{})
|
||||||
|
defer app.ReleaseCtx(c)
|
||||||
|
app.serverErrorHandler(c.fasthttp, &net.DNSError{
|
||||||
|
Err: "test error",
|
||||||
|
Name: "test host",
|
||||||
|
IsTimeout: false,
|
||||||
|
})
|
||||||
|
utils.AssertEqual(t, string(c.fasthttp.Response.Body()), utils.StatusMessage(StatusBadGateway))
|
||||||
|
utils.AssertEqual(t, c.fasthttp.Response.StatusCode(), StatusBadGateway)
|
||||||
|
}
|
||||||
|
|
||||||
func Test_App_Nested_Params(t *testing.T) {
|
func Test_App_Nested_Params(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
app := New()
|
app := New()
|
||||||
|
|
Loading…
Reference in New Issue