echo icon indicating copy to clipboard operation
echo copied to clipboard

Group middleware does not work for "Any" route

Open KaymeKaydex opened this issue 2 years ago • 1 comments

Issue Description

Checklist

  • [ + ] Dependencies installed
  • [ + ] No typos
  • [ + ] Searched existing issues and docs

Expected behaviour

normal routing

Actual behaviour

{ "message": "Not Found" }

Steps to reproduce

just create any request

Working code to debug

	g := e.Group("/api/test") 
	g.Use(echo.WrapMiddleware(mw.NewMW()))
	{
		g.Any("*", testController.Proxy) 
	}

actual result is 
{
    "message": "Not Found"
}
but route cant return anything

Version/commit

github.com/labstack/echo/v4 v4.11.1

KaymeKaydex avatar Sep 06 '23 09:09 KaymeKaydex

This is little bit tricky.

Let assume group and handler is added like this:

func main() {
	e := echo.New()

	g := e.Group("/api/test")
	//g.Use(middleware.Logger())
	g.Any("*", func(c echo.Context) error {
		return c.String(http.StatusOK, c.Path())
	})

	if err := e.Start(":8080"); err != nil && !errors.Is(err, http.ErrServerClosed) {
		e.Logger.Fatal(err)
	}
}

When you add route with g.Any("*" you will end up with route path /api/test*. This will match both of following request

x@x:~/code$ curl http://localhost:8080/api/test/hi
/api/test*
x@x:~/code$ curl http://localhost:8080/api/testhi
/api/test*

as your router has following routes image

now when we add middleware to that group by uncommenting g.Use(middleware.Logger())

we have following routes image

that 4 is 404 route for path /api/test/* which is causing problem here as it is more precise match than api/test*.

x@x:~/code$ curl http://localhost:8080/api/testhi
/api/test*
x@x:~/code$ curl http://localhost:8080/api/test/hi
{"message":"Not Found"}

As a workaround I suggest:

  • adding that any route like that g.Any("/*" as it will then overwrite that 404 route.
  • or creating group like that g := e.Group("/api/test/")

That 404 route is a "feature" that is added here (line 32) https://github.com/labstack/echo/blob/77d5ae6a9173d89c49e008607d08df7ba41336f0/group.go#L21-L32

aldas avatar Sep 06 '23 10:09 aldas