如何过滤来自大猩猩的一些路径 mux.Router
How to filter some path from gorilla mux.Router
我只想匹配 mux.Router 中的一些路由,并对所有其他路由使用相同的处理程序。我该怎么做?
即:具有这些路径:
/general/baz/bro
/general/foo/bar
/general/unknown
我想将第一个与特定处理程序匹配,然后将所有其他与默认处理程序匹配。
我尝试过类似的方法但没有成功:
r.Methods("GET").PathPrefix("/general").Handler(defaultHandler)
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
我期待 bazBroHandler 处理 /general/baz/bro
路径,而 defaultHandler 所有其他以 /general
开头
实现此目的的一种方法是使用 MatcherFunc。在MatcherFunc
、compare/verify传入请求Path
,即:
//Default handler
r.MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
return r.URL.Path != "/general/baz/bro" && strings.HasPrefix(r.URL.Path, "/general") && r.Method == "GET"
}).Handler(defaultHandler)
//Specific handler
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
最后我才意识到我需要颠倒顺序:
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
r.Methods("GET").PathPrefix("/general").Handler(defaultHandler)
现在一切正常!
我只想匹配 mux.Router 中的一些路由,并对所有其他路由使用相同的处理程序。我该怎么做?
即:具有这些路径:
/general/baz/bro
/general/foo/bar
/general/unknown
我想将第一个与特定处理程序匹配,然后将所有其他与默认处理程序匹配。
我尝试过类似的方法但没有成功:
r.Methods("GET").PathPrefix("/general").Handler(defaultHandler)
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
我期待 bazBroHandler 处理 /general/baz/bro
路径,而 defaultHandler 所有其他以 /general
实现此目的的一种方法是使用 MatcherFunc。在MatcherFunc
、compare/verify传入请求Path
,即:
//Default handler
r.MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
return r.URL.Path != "/general/baz/bro" && strings.HasPrefix(r.URL.Path, "/general") && r.Method == "GET"
}).Handler(defaultHandler)
//Specific handler
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
最后我才意识到我需要颠倒顺序:
r.Methods("GET").Path("/general/baz/bro").Handler(bazBroHandler)
r.Methods("GET").PathPrefix("/general").Handler(defaultHandler)
现在一切正常!