mirror of
https://gitee.com/johng/gf
synced 2026-06-07 10:22:11 +08:00
修复模糊匹配路由规则
This commit is contained in:
@ -192,18 +192,7 @@ func (s *Server) searchHandlerDynamic(r *Request) *handlerCacheItem {
|
||||
if _, ok := p.(map[string]interface{})["*list"]; ok {
|
||||
lists = append(lists, p.(map[string]interface{})["*list"].(*list.List))
|
||||
}
|
||||
if _, ok := p.(map[string]interface{})[v]; !ok {
|
||||
if _, ok := p.(map[string]interface{})["/"]; ok {
|
||||
p = p.(map[string]interface{})["/"]
|
||||
if k == len(array) - 1 {
|
||||
if _, ok := p.(map[string]interface{})["*list"]; ok {
|
||||
lists = append(lists, p.(map[string]interface{})["*list"].(*list.List))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if _, ok := p.(map[string]interface{})[v]; ok {
|
||||
p = p.(map[string]interface{})[v]
|
||||
if k == len(array) - 1 {
|
||||
if _, ok := p.(map[string]interface{})["*list"]; ok {
|
||||
@ -211,6 +200,15 @@ func (s *Server) searchHandlerDynamic(r *Request) *handlerCacheItem {
|
||||
}
|
||||
}
|
||||
}
|
||||
// 如果是叶子节点,同时判断当前层级的"/"键名,解决例如:/user/*action 匹配 /user 的规则
|
||||
if k == len(array) - 1 {
|
||||
if _, ok := p.(map[string]interface{})["/"]; ok {
|
||||
p = p.(map[string]interface{})["/"]
|
||||
if _, ok := p.(map[string]interface{})["*list"]; ok {
|
||||
lists = append(lists, p.(map[string]interface{})["*list"].(*list.List))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 多层链表遍历检索,从数组末尾的链表开始遍历,末尾的深度高优先级也高
|
||||
@ -261,7 +259,7 @@ func (s *Server) patternToRegRule(rule string) (regrule string, names string) {
|
||||
}
|
||||
names += v[1:]
|
||||
case '*':
|
||||
regrule += `/(.*)`
|
||||
regrule += `/{0,1}(.*)`
|
||||
if len(names) > 0 {
|
||||
names += ","
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user