【发布时间】:2015-05-11 02:48:18
【问题描述】:
我正在使用来自 Golang Gorilla Toolkit 的 Mux 包作为我的路由。
考虑以下路线:
m.HandleFunc("/admin/install", installHandler).Methods("GET")
m.HandleFunc("/admin/^((?!install).)*$", adminHandler).Methods("GET")
m.HandleFunc("/admin", adminHandler).Methods("GET")
问题在于中间路线的正则表达式 - 它没有被解释,因此该路线将不起作用!
m.HandleFunc("/admin/{^((?!install).)*$}", adminHandler).Methods("GET")
使用 {} 大括号也不起作用。它只是被忽略,并被视为 /admin/
也没有:
m.HandleFunc("/admin/{_dummy:^((?!install).)*$}", adminHandler).Methods("GET")
简而言之,我在这里尝试实现的是首先匹配 /admin/install 路由,然后我想使用正则表达式从下面的路由中排除该确切路由,但它不起作用。
有没有办法在 gorilla mux 包中使用正则表达式?
【问题讨论】:
-
这不是匹配 gorrila/mux 中路径的语法:
[paths] are defined using the format {name} or {name:pattern}。 gorillatoolkit.org/pkg/mux -
嘿,我在看到您的评论之前编辑了帖子,但我当然也用以下两种方式进行了测试:1) 大括号不适用于我的“排除”正则表达式。 2) {_dummy: regex} 也没有
-
Go 正则表达式也不支持这种语法。你不需要排除安装,因为它会被第一个路由匹配。
-
我在管理处理程序中有一些逻辑,只有在用户登录并且用户在请求上下文中设置时才有效,并且只应该访问服务器,所以这就是我想要的理由例外并排除 /admin/install 路线并包括所有其他路线。 :) 我知道我可以在 admin、handler 中编写自己的代码,但我认为如果这能奏效那就太好了:-)
-
你选错了答案:
[^install]和“后面不跟安装”不一样。