Former-commit-id: 6ac95ef58bf3dd0dac8bed2100495fa9908f41d4
This commit is contained in:
Gerasimos (Makis) Maropoulos 2020-02-10 20:35:19 +02:00
parent 10f280af63
commit c558e039d5
3 changed files with 28 additions and 3 deletions

View File

@ -4,7 +4,7 @@ import (
"github.com/kataras/iris/v12"
)
func main() {
func newApp() *iris.Application {
app := iris.New()
v1 := app.Party("/api/v1")
@ -15,7 +15,8 @@ func main() {
}
onlyWhenFilter1 := func(ctx iris.Context) {
ctx.Application().Logger().Infof("admin: %s", ctx.Params())
ctx.Application().Logger().Infof("admin: %#+v", ctx.URLParams())
ctx.Writef("<title>Admin</title>\n")
ctx.Next()
}
@ -43,6 +44,12 @@ func main() {
ctx.HTML("requested: <b>/api/v1/users</b>")
})
return app
}
func main() {
app := newApp()
// http://localhost:8080/api/v1/users
// http://localhost:8080/api/v1/users?admin=true
app.Run(iris.Addr(":8080"))

View File

@ -0,0 +1,17 @@
package main
import (
"testing"
"github.com/kataras/iris/v12/httptest"
)
func TestNewConditionalHandler(t *testing.T) {
app := newApp()
e := httptest.New(t, app)
e.GET("/api/v1/users").Expect().Status(httptest.StatusOK).
Body().Equal("requested: <b>/api/v1/users</b>")
e.GET("/api/v1/users").WithQuery("admin", "true").Expect().Status(httptest.StatusOK).
Body().Equal("<title>Admin</title>\n<h1>Hello Admin</h1><br>requested: <b>/api/v1/users</b>")
}

View File

@ -90,6 +90,7 @@ func NewConditionalHandler(filter Filter, handlers ...Handler) Handler {
// to check and modify the per-request handlers chain at runtime.
currIdx := ctx.HandlerIndex(-1)
currHandlers := ctx.Handlers()
if currIdx == len(currHandlers)-1 {
// if this is the last handler of the chain
// just add to the last the new handlers and call Next to fire those.
@ -98,7 +99,7 @@ func NewConditionalHandler(filter Filter, handlers ...Handler) Handler {
return
}
// otherwise insert the new handlers in the middle of the current executed chain and the next chain.
newHandlers := append(currHandlers[:currIdx], append(handlers, currHandlers[currIdx+1:]...)...)
newHandlers := append(currHandlers[:currIdx+1], append(handlers, currHandlers[currIdx+1:]...)...)
ctx.SetHandlers(newHandlers)
ctx.Next()
return