manba icon indicating copy to clipboard operation
manba copied to clipboard

route.go Find函数匹配问题

Open zouyih opened this issue 1 year ago • 2 comments

func TestFindMatchAmbiguity(t *testing.T) {
	r := NewRoute()
	r.Add(&metapb.API{
		ID:         1,
		URLPattern: "/a/b/c",
		Method:     "*",
	})
	r.Add(&metapb.API{
		ID:         2,
		URLPattern: "/(string):x/b/e",
		Method:     "*",
	})

	params := make(map[string]string, 0)
	paramsFunc := func(name, value []byte) {
		params[string(name)] = string(value)
	}

	id, _ := r.Find([]byte("/a/b/e"), "GET", paramsFunc)
	fmt.Println(id, params)
}

输出: 0 map[]

预期是要匹配到api_id =2, 实际上匹配不了

zouyih avatar Sep 07 '22 11:09 zouyih

func TestFindMatchAmbiguity(t *testing.T) {
	r := NewRoute()

	r.Add(&metapb.API{
		ID:         2,
		URLPattern: "/(string):x/b/e",
		Method:     "*",
	})

	params := make(map[string]string, 0)
	paramsFunc := func(name, value []byte) {
		params[string(name)] = string(value)
	}

	id, _ := r.Find([]byte("/a/b/e"), "GET", paramsFunc)
	fmt.Println(id, params)
}

输出: 2 map[x:a]

如果去掉api_id=1,才能匹配到结果

zouyih avatar Sep 07 '22 11:09 zouyih

route的匹配算法只选了一个路径进行匹配,没有做错误回退处理,用深搜应该可以解决这个问题

zouyih avatar Sep 07 '22 11:09 zouyih