1
0
mirror of https://github.com/labstack/echo.git synced 2025-01-07 23:01:56 +02:00
Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
Vishal Rana 2016-10-14 14:37:05 -07:00
parent a88c4399d4
commit 1dcb7ba9ab
3 changed files with 39 additions and 2 deletions

View File

@ -16,6 +16,11 @@ type (
// Use implements `Echo#Use()` for sub-routes within the Group.
func (g *Group) Use(m ...MiddlewareFunc) {
g.middleware = append(g.middleware, m...)
// Allow all requests to reach the group as they might get dropped if router
// doesn't find a match, making none of the group middleware process.
g.echo.Any(g.prefix+"*", func(c Context) error {
return ErrNotFound
}, g.middleware...)
}
// CONNECT implements `Echo#CONNECT()` for sub-routes within the Group.

View File

@ -343,7 +343,7 @@ func (r *Router) Find(method, path string, context Context) {
// Static node
if c = cn.findChild(search[0], skind); c != nil {
// Save next
if cn.label == '/' {
if cn.prefix[len(cn.prefix)-1] == '/' { // Issue #623
nk = pkind
nn = cn
ns = search
@ -361,7 +361,7 @@ func (r *Router) Find(method, path string, context Context) {
}
// Save next
if cn.label == '/' {
if cn.prefix[len(cn.prefix)-1] == '/' { // Issue #623
nk = akind
nn = cn
ns = search

View File

@ -552,6 +552,38 @@ func TestRouterParamNames(t *testing.T) {
assert.Equal(t, "1", c.P(1))
}
// Issue #623
func TestRouterStaticDynamicConflict(t *testing.T) {
e := New()
r := e.router
c := e.NewContext(nil, nil)
r.Add(GET, "/dictionary/skills", func(c Context) error {
c.Set("a", 1)
return nil
}, e)
r.Add(GET, "/dictionary/:name", func(c Context) error {
c.Set("b", 2)
return nil
}, e)
r.Add(GET, "/server", func(c Context) error {
c.Set("c", 3)
return nil
}, e)
r.Find(GET, "/dictionary/skills", c)
c.Handler()(c)
assert.Equal(t, 1, c.Get("a"))
c = e.NewContext(nil, nil)
r.Find(GET, "/dictionary/type", c)
c.Handler()(c)
assert.Equal(t, 2, c.Get("b"))
c = e.NewContext(nil, nil)
r.Find(GET, "/server", c)
c.Handler()(c)
assert.Equal(t, 3, c.Get("c"))
}
func TestRouterAPI(t *testing.T) {
e := New()
r := e.router