1
0
mirror of https://github.com/labstack/echo.git synced 2024-12-24 20:14:31 +02:00
Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
Vishal Rana 2016-03-06 23:24:51 -08:00
parent b855b5d507
commit 4f08fed018
4 changed files with 29 additions and 4 deletions

View File

@ -133,12 +133,12 @@ func WrapHandler(h fasthttp.RequestHandler) echo.HandlerFunc {
} }
// WrapMiddleware wraps `fasthttp.RequestHandler` into `echo.MiddlewareFunc` // WrapMiddleware wraps `fasthttp.RequestHandler` into `echo.MiddlewareFunc`
func WrapMiddleware(m fasthttp.RequestHandler) echo.MiddlewareFunc { func WrapMiddleware(h fasthttp.RequestHandler) echo.MiddlewareFunc {
return func(next echo.Handler) echo.Handler { return func(next echo.Handler) echo.Handler {
return echo.HandlerFunc(func(c echo.Context) error { return echo.HandlerFunc(func(c echo.Context) error {
ctx := c.Request().Object().(*fasthttp.RequestCtx) ctx := c.Request().Object().(*fasthttp.RequestCtx)
if !c.Response().Committed() { if !c.Response().Committed() {
m(ctx) h(ctx)
} }
return next.Handle(c) return next.Handle(c)
}) })

View File

@ -129,13 +129,13 @@ func WrapHandler(h http.Handler) echo.HandlerFunc {
} }
// WrapMiddleware wraps `http.Handler` into `echo.MiddlewareFunc` // WrapMiddleware wraps `http.Handler` into `echo.MiddlewareFunc`
func WrapMiddleware(m http.Handler) echo.MiddlewareFunc { func WrapMiddleware(h http.Handler) echo.MiddlewareFunc {
return func(next echo.Handler) echo.Handler { return func(next echo.Handler) echo.Handler {
return echo.HandlerFunc(func(c echo.Context) error { return echo.HandlerFunc(func(c echo.Context) error {
w := c.Response().Object().(http.ResponseWriter) w := c.Response().Object().(http.ResponseWriter)
r := c.Request().Object().(*http.Request) r := c.Request().Object().(*http.Request)
if !c.Response().Committed() { if !c.Response().Committed() {
m.ServeHTTP(w, r) h.ServeHTTP(w, r)
} }
return next.Handle(c) return next.Handle(c)
}) })

View File

@ -351,12 +351,18 @@ func (r *Router) Find(method, path string, context Context) {
// Param node // Param node
Param: Param:
if c = cn.findChildByKind(pkind); c != nil { if c = cn.findChildByKind(pkind); c != nil {
// Issue #378
if len(ctx.pvalues) == n {
continue
}
// Save next // Save next
if cn.label == '/' { if cn.label == '/' {
nk = akind nk = akind
nn = cn nn = cn
ns = search ns = search
} }
cn = c cn = c
i, l := 0, len(search) i, l := 0, len(search)
for ; i < l && search[i] != '/'; i++ { for ; i < l && search[i] != '/'; i++ {

View File

@ -311,6 +311,25 @@ func TestRouterTwoParam(t *testing.T) {
assert.Equal(t, "1", c.P(1)) assert.Equal(t, "1", c.P(1))
} }
// Issue #378
func TestRouterParamWithSlash(t *testing.T) {
e := New()
r := e.router
r.Add(GET, "/a/:b/c/d/:e", HandlerFunc(func(c Context) error {
return nil
}), e)
r.Add(GET, "/a/:b/c/:d/:f", HandlerFunc(func(c Context) error {
return nil
}), e)
c := NewContext(nil, nil, e)
assert.NotPanics(t, func() {
r.Find(GET, "/a/1/c/d/2/3", c)
})
}
func TestRouterMatchAny(t *testing.T) { func TestRouterMatchAny(t *testing.T) {
e := New() e := New()
r := e.router r := e.router