修复当路由带后缀/时的路由重复注册判断失效问题

This commit is contained in:
John
2018-08-27 22:44:14 +08:00
parent 34e86b839d
commit 75d9e312f3
2 changed files with 21 additions and 13 deletions

View File

@ -35,7 +35,7 @@ func (s *Server)parsePattern(pattern string) (domain, method, uri string, err er
if uri == "" {
err = errors.New("invalid pattern")
}
// 去掉末尾的"/"符号,与路由匹配时处理一
// 去掉末尾的"/"符号,与路由匹配时处理一
if uri != "/" {
uri = strings.TrimRight(uri, "/")
}
@ -61,7 +61,15 @@ func (s *Server) setHandler(pattern string, handler *handlerItem, hook ... strin
if s.Status() == SERVER_STATUS_RUNNING {
return errors.New("cannot bind handler while server running")
}
regkey := fmt.Sprintf(`%s@%v`, pattern, hook)
var hookName string
if len(hook) > 0 {
hookName = hook[0]
}
domain, method, uri, err := s.parsePattern(pattern)
if err != nil {
return errors.New("invalid pattern")
}
regkey := s.hookHandlerKey(hookName, method, uri, domain)
caller := s.getHandlerRegisterCallerLine(handler)
if line, ok := s.routesMap[regkey]; ok {
s := fmt.Sprintf(`duplicated route registry "%s" in %s , former in %s`, pattern, caller, line)
@ -75,15 +83,6 @@ func (s *Server) setHandler(pattern string, handler *handlerItem, hook ... strin
}()
}
var hookName string
if len(hook) > 0 {
hookName = hook[0]
}
domain, method, uri, err := s.parsePattern(pattern)
if err != nil {
return errors.New("invalid pattern")
}
// 路由对象
handler.router = &Router {
Uri : uri,

View File

@ -1,10 +1,19 @@
package main
import (
"gitee.com/johng/gf/g"
"gitee.com/johng/gf/g/net/ghttp"
"fmt"
"gitee.com/johng/gf/g/os/gfile"
)
func main() {
fmt.Println(gfile.RealPath())
s := g.Server()
s.BindHandler("/admin", func(r *ghttp.Request) {
fmt.Println("admin")
})
s.BindHandler("/admin/", func(r *ghttp.Request) {
fmt.Println("admin/")
})
s.SetPort(8199)
s.Run()
}