mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 10:41:03 +01:00
fix https://github.com/kataras/iris/issues/1713 and add a simple usage example of the 'RemoveHandler'
This commit is contained in:
parent
197df1ef64
commit
f7757c0793
|
@ -48,6 +48,7 @@
|
|||
* Middleware
|
||||
* [Per Route](routing/writing-a-middleware/per-route/main.go)
|
||||
* [Globally](routing/writing-a-middleware/globally/main.go)
|
||||
* [Remove a Handler](routing/remove-handler/main.go)
|
||||
* Share Values
|
||||
* [Share Services](routing/writing-a-middleware/share-services/main.go)
|
||||
* [Share Functions](routing/writing-a-middleware/share-funcs/main.go)
|
||||
|
|
29
_examples/routing/remove-handler/main.go
Normal file
29
_examples/routing/remove-handler/main.go
Normal file
|
@ -0,0 +1,29 @@
|
|||
package main
|
||||
|
||||
import "github.com/kataras/iris/v12"
|
||||
|
||||
func main() {
|
||||
app := newApp()
|
||||
app.Listen(":8080")
|
||||
}
|
||||
|
||||
func newApp() *iris.Application {
|
||||
app := iris.New()
|
||||
|
||||
api := app.Party("/api")
|
||||
api.Use(myMiddleware)
|
||||
users := api.Party("/users")
|
||||
users.Get("/", usersIndex).RemoveHandler(myMiddleware)
|
||||
// OR for all routes under a Party (or Application):
|
||||
// users.RemoveHandler(...)
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
func myMiddleware(ctx iris.Context) {
|
||||
ctx.WriteString("Middleware\n")
|
||||
}
|
||||
|
||||
func usersIndex(ctx iris.Context) {
|
||||
ctx.WriteString("OK")
|
||||
}
|
14
_examples/routing/remove-handler/main_test.go
Normal file
14
_examples/routing/remove-handler/main_test.go
Normal file
|
@ -0,0 +1,14 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/kataras/iris/v12/httptest"
|
||||
)
|
||||
|
||||
func TestSimpleRouteRemoveHandler(t *testing.T) {
|
||||
app := newApp()
|
||||
e := httptest.New(t, app)
|
||||
|
||||
e.GET("/api/users").Expect().Status(httptest.StatusOK).Body().Equal("OK")
|
||||
}
|
|
@ -2280,7 +2280,7 @@ type internalJSONDecoder interface {
|
|||
|
||||
func (cfg JSONReader) getDecoder(r io.Reader, globalShouldOptimize bool) (decoder internalJSONDecoder) {
|
||||
if cfg.Optimize || globalShouldOptimize {
|
||||
decoder = jsoniter.NewDecoder(r)
|
||||
decoder = jsoniter.ConfigCompatibleWithStandardLibrary.NewDecoder(r)
|
||||
} else {
|
||||
decoder = json.NewDecoder(r)
|
||||
}
|
||||
|
|
|
@ -16,40 +16,23 @@ import (
|
|||
func FromStd(handler interface{}) context.Handler {
|
||||
switch h := handler.(type) {
|
||||
case context.Handler:
|
||||
{
|
||||
//
|
||||
// it's already an Iris Handler
|
||||
//
|
||||
return h
|
||||
}
|
||||
case func(*context.Context):
|
||||
return h
|
||||
case http.Handler:
|
||||
{
|
||||
//
|
||||
// handlerFunc.ServeHTTP(w,r)
|
||||
//
|
||||
return func(ctx *context.Context) {
|
||||
h.ServeHTTP(ctx.ResponseWriter(), ctx.Request())
|
||||
}
|
||||
}
|
||||
case func(http.ResponseWriter, *http.Request):
|
||||
{
|
||||
//
|
||||
// handlerFunc(w,r)
|
||||
//
|
||||
return FromStd(http.HandlerFunc(h))
|
||||
}
|
||||
case func(http.ResponseWriter, *http.Request, http.HandlerFunc):
|
||||
{
|
||||
//
|
||||
// handlerFunc(w,r, http.HandlerFunc)
|
||||
//
|
||||
return FromStdWithNext(h)
|
||||
}
|
||||
default:
|
||||
{
|
||||
//
|
||||
// No valid handler passed
|
||||
//
|
||||
panic(fmt.Errorf(`
|
||||
Passed argument is not a func(iris.Context) neither one of these types:
|
||||
- http.Handler
|
||||
|
@ -59,7 +42,6 @@ func FromStd(handler interface{}) context.Handler {
|
|||
It seems to be a %T points to: %v`, handler, handler))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FromStdWithNext receives a standar handler - middleware form - and returns a
|
||||
// compatible context.Handler wrapper.
|
||||
|
|
|
@ -1210,7 +1210,7 @@ func (api *APIBuilder) RemoveHandler(namesOrHandlers ...interface{}) Party {
|
|||
switch h := nameOrHandler.(type) {
|
||||
case string:
|
||||
handlerName = h
|
||||
case context.Handler:
|
||||
case context.Handler, func(*context.Context):
|
||||
handlerName = context.HandlerName(h)
|
||||
case *int:
|
||||
counter = h
|
||||
|
|
|
@ -159,7 +159,7 @@ func (r *Route) RemoveHandler(namesOrHandlers ...interface{}) (count int) {
|
|||
switch h := nameOrHandler.(type) {
|
||||
case string:
|
||||
handlerName = h
|
||||
case context.Handler:
|
||||
case context.Handler, func(*context.Context):
|
||||
handlerName = context.HandlerName(h)
|
||||
default:
|
||||
panic(fmt.Sprintf("remove handler: unexpected type of %T", h))
|
||||
|
|
Loading…
Reference in New Issue
Block a user