Skip to content

Commit

Permalink
fix(route): redirectSlash bug (#3227)
Browse files Browse the repository at this point in the history
fixes #2959
fixes #2282
fixes #2211
  • Loading branch information
thinkerou authored and appleboy committed Dec 22, 2022
1 parent ed049dd commit e305e21
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
9 changes: 8 additions & 1 deletion tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ func countSections(path string) uint16 {
type nodeType uint8

const (
root nodeType = iota + 1
static nodeType = iota
root
param
catchAll
)
Expand Down Expand Up @@ -173,6 +174,7 @@ walk:
child := node{
path: n.path[i:],
wildChild: n.wildChild,
nType: static,
indices: n.indices,
children: n.children,
handlers: n.handlers,
Expand Down Expand Up @@ -604,6 +606,11 @@ walk: // Outer loop for walking the tree
return
}

if path == "/" && n.nType == static {
value.tsr = true
return
}

// No handle found. Check if a handle for this path + a
// trailing slash exists for trailing slash recommendation
for i, c := range []byte(n.indices) {
Expand Down
20 changes: 20 additions & 0 deletions tree_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,26 @@ func TestTreeRootTrailingSlashRedirect(t *testing.T) {
}
}

func TestRedirectTrailingSlash(t *testing.T) {
var data = []struct {
path string
}{
{"/hello/:name"},
{"/hello/:name/123"},
{"/hello/:name/234"},
}

node := &node{}
for _, item := range data {
node.addRoute(item.path, fakeHandler("test"))
}

value := node.getValue("/hello/abx/", nil, getSkippedNodes(), false)
if value.tsr != true {
t.Fatalf("want true, is false")
}
}

func TestTreeFindCaseInsensitivePath(t *testing.T) {
tree := &node{}

Expand Down

0 comments on commit e305e21

Please sign in to comment.