mirror of
https://github.com/labstack/echo.git
synced 2024-12-24 20:14:31 +02:00
Middleware to add and remove trailing slash
Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
parent
ba46c48cba
commit
1b3197a149
@ -12,7 +12,6 @@ import (
|
||||
|
||||
func TestRecover(t *testing.T) {
|
||||
e := echo.New()
|
||||
e.SetDebug(true)
|
||||
buf := new(bytes.Buffer)
|
||||
e.SetLogOutput(buf)
|
||||
rq := test.NewRequest(echo.GET, "/", nil)
|
||||
|
40
middleware/slash.go
Normal file
40
middleware/slash.go
Normal file
@ -0,0 +1,40 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo"
|
||||
)
|
||||
|
||||
// AddTrailingSlash returns a root level (before router) middleware which adds a
|
||||
// trailing slash to the request `URL#Path`.
|
||||
//
|
||||
// Usage `Echo#Pre(AddTrailingSlash())`
|
||||
func AddTrailingSlash() echo.MiddlewareFunc {
|
||||
return func(next echo.Handler) echo.Handler {
|
||||
return echo.HandlerFunc(func(c echo.Context) error {
|
||||
url := c.Request().URL()
|
||||
path := url.Path()
|
||||
if path != "/" && path[len(path)-1] != '/' {
|
||||
url.SetPath(path + "/")
|
||||
}
|
||||
return next.Handle(c)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// RemoveTrailingSlash returns a root level (before router) middleware which removes
|
||||
// a trailing slash from the request URI.
|
||||
//
|
||||
// Usage `Echo#Pre(RemoveTrailingSlash())`
|
||||
func RemoveTrailingSlash() echo.MiddlewareFunc {
|
||||
return func(next echo.Handler) echo.Handler {
|
||||
return echo.HandlerFunc(func(c echo.Context) error {
|
||||
url := c.Request().URL()
|
||||
path := url.Path()
|
||||
l := len(path) - 1
|
||||
if path != "/" && path[l] == '/' {
|
||||
url.SetPath(path[:l])
|
||||
}
|
||||
return next.Handle(c)
|
||||
})
|
||||
}
|
||||
}
|
33
middleware/slash_test.go
Normal file
33
middleware/slash_test.go
Normal file
@ -0,0 +1,33 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/labstack/echo"
|
||||
"github.com/labstack/echo/test"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestAddTrailingSlash(t *testing.T) {
|
||||
e := echo.New()
|
||||
rq := test.NewRequest(echo.GET, "/add-slash", nil)
|
||||
rc := test.NewResponseRecorder()
|
||||
c := echo.NewContext(rq, rc, e)
|
||||
h := AddTrailingSlash()(echo.HandlerFunc(func(c echo.Context) error {
|
||||
return nil
|
||||
}))
|
||||
h.Handle(c)
|
||||
assert.Equal(t, "/add-slash/", rq.URL().Path())
|
||||
}
|
||||
|
||||
func TestRemoveTrailingSlash(t *testing.T) {
|
||||
e := echo.New()
|
||||
rq := test.NewRequest(echo.GET, "/remove-slash/", nil)
|
||||
rc := test.NewResponseRecorder()
|
||||
c := echo.NewContext(rq, rc, e)
|
||||
h := RemoveTrailingSlash()(echo.HandlerFunc(func(c echo.Context) error {
|
||||
return nil
|
||||
}))
|
||||
h.Handle(c)
|
||||
assert.Equal(t, "/remove-slash", rq.URL().Path())
|
||||
}
|
Loading…
Reference in New Issue
Block a user