如何使用 Gorilla Mux 进行 URL 匹配?
Posted
技术标签:
【中文标题】如何使用 Gorilla Mux 进行 URL 匹配?【英文标题】:How to use Gorilla Mux for URL matching? 【发布时间】:2020-03-10 07:43:18 【问题描述】:我有一个验证器函数来检查给定路径是否与路径数组中的路径匹配。
当前逻辑:
var allowed := String"/users", "/teams"
func Validator(path String) bool
for _, p := range allowed
if path == p
return true
return false
我想用 golang gorilla mux 替换它,因为我可能有路径变量。 mux 的 github 存储库说“HTTP 路由器和 URL 匹配器”。但是,没有关于如何使用它进行 URL 匹配的示例。
【问题讨论】:
url 匹配是由路由器完成的,它是为了路由而不是验证。为了您的方便,gorilla/mux 不提供独立的匹配器。您要么使用 mux.Router 将 http 请求路由到特定的处理程序,要么不使用。如果你只需要一个验证器,而不是路由器,那么不要使用 gorilla/mux。 这能回答你的问题吗? golang mux, routing wildcard & custom func match @SahithVibudhi 说,如果你仍然想使用 gorilla/mux(请不要)然后看看 mux.Router.Match 方法,正如你所看到的,因为这是一个 http request router 参数必须是一个http请求,所以如果你想使用它,你需要将你想要验证的路径变成一个请求。 我用类似的方法解决了。我必须验证/users/id
之类的路径,以检查开发人员令牌是否可以访问此端点。我不想重写逻辑,而是想重新使用 mux 的“URL 匹配器”。因为它附带一个。
@ifnotak 不能解决问题。我已经添加了答案。
【参考方案1】:
这是我通过代码解决它的方法:
// STEP 1: create a router
router := mux.NewRouter()
// STEP 2: register routes that are allowed
router.NewRoute().Path("/users/id").Methods("GET")
router.NewRoute().Path("/users").Methods("GET")
router.NewRoute().Path("/teams").Methods("GET")
routeMatch := mux.RouteMatch
// STEP 3: create a http.Request to use in Mux Route Matcher
url := url.URL Path: "/users/1"
request := http.Request Method:"GET", URL: &url
// STEP 4: Mux's Router returns true/false
x := router.Match(&request, &routeMatch)
fmt.Println(x) // true
url = url.URL Path: "/other-endpoint"
request = http.Request Method:"GET", URL: &url
x = router.Match(&request, &routeMatch)
fmt.Println(x) // false
【讨论】:
以上是关于如何使用 Gorilla Mux 进行 URL 匹配?的主要内容,如果未能解决你的问题,请参考以下文章