1
0
mirror of https://github.com/kataras/iris.git synced 2026-01-09 13:05:56 +00:00

mvc: give the end-developer the option to skip an error through the HandleError method

relative to: https://github.com/kataras/iris/issues/1628#issuecomment-691668764
This commit is contained in:
Gerasimos (Makis) Maropoulos
2020-09-13 16:03:20 +03:00
parent 7431fcc9cf
commit 99fd50bf9d
3 changed files with 53 additions and 1 deletions

View File

@@ -118,7 +118,12 @@ func makeHandler(fn interface{}, c *Container, paramsCount int) context.Handler
// }
c.GetErrorHandler(ctx).HandleError(ctx, err)
return
// return [13 Sep 2020, commented that in order to be able to
// give end-developer the option not only to handle the error
// but to skip it if necessary, example:
// read form, unknown field, continue without StopWith,
// the binder should bind the method's input argument and continue
// without errors. See `mvc.TestErrorHandlerContinue` test.]
}
// If ~an error status code is set or~ execution has stopped

View File

@@ -137,6 +137,16 @@ func TestPayloadBinding(t *testing.T) {
return input.Username
})
h.GetErrorHandler = func(iris.Context) ErrorHandler {
return ErrorHandlerFunc(func(ctx iris.Context, err error) {
if iris.IsErrPath(err) {
return // continue.
}
ctx.StopWithError(iris.StatusBadRequest, err)
})
}
app := iris.New()
app.Get("/", ptrHandler)
app.Post("/", ptrHandler)
@@ -152,6 +162,9 @@ func TestPayloadBinding(t *testing.T) {
e.POST("/").WithFormField("username", "makis").Expect().Status(httptest.StatusOK).Body().Equal("makis")
// FORM (multipart)
e.POST("/").WithMultipart().WithFormField("username", "makis").Expect().Status(httptest.StatusOK).Body().Equal("makis")
// FORM: test ErrorHandler skip the ErrPath.
e.POST("/").WithMultipart().WithFormField("username", "makis").WithFormField("unknown", "continue").
Expect().Status(httptest.StatusOK).Body().Equal("makis")
// POST URL query.
e.POST("/").WithQuery("username", "makis").Expect().Status(httptest.StatusOK).Body().Equal("makis")