go - 匹配不同端点的 HTTP 请求 - gorilla mux
问题描述
我有以下处理函数,DataSetsGet 和 RetrieveSharedData。当使用 URL https://127.0.0.1:20000/nfdm-fdm/v2/shared-data发出请求时,我从 DataSetsGet 处理程序而不是 RetrieveSharedData 处理程序函数获得响应。当我将括号从 {id} 带到 id 时,我会从 RetrieveSharedData 处理程序中得到正确的响应。解决此问题的任何帮助,我的代码在下面省略了代码。
func DataSetsGet(response http.ResponseWriter, request *http.Request) {
// Data set response codes
}
func RetrieveSharedData(response http.ResponseWriter, request *http.Request) {
// Retrieve shared data response codes
}
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
var Router = NewRouter()
type Routes []Route
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
router.
Methods(route.Method).
Path(route.Pattern).
Name(route.Name).
Handler(handler)
}
return router
}
var routes = Routes{
Route{
"DataSetsGet",
strings.ToUpper("Get"),
"/nfdm-fdm/v2/{id}",
DataSetsGet,
},
Route{
"RetrieveSharedData",
strings.ToUpper("Get"),
"/nfdm-fdm/v2/shared-data",
RetrieveSharedData,
},
}
func main{
addr := "127.0.0.1:6060"
server := NewServer(addr)
go func() {
err := server.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
logger.Log.Errorf("Could not listen on %s: %v\n", addr, err)
}
}()
}
// Create a new server
func NewServer(ListAddr string) *http.Server {
return &http.Server{
Addr: ListAddr,
Handler: Router,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 15 * time.Second,
}
}
解决方案
只需重新排序您的路由并确保在正则表达式路由之前包含静态路由,如果在正则表达式路由之前完全匹配,这将导致静态路由优先。
var routes = Routes{
Route{
"RetrieveSharedData",
strings.ToUpper("Get"),
"/nfdm-fdm/v2/shared-data",
RetrieveSharedData,
},
Route{
"DataSetsGet",
strings.ToUpper("Get"),
"/nfdm-fdm/v2/{id}",
DataSetsGet,
},
}
推荐阅读
- javascript - Vue-Router:刷新后带有参数的页面为空白
- javascript - AND 和 OR 运算符在相同的 if 条件下
- python - 如何在使用自定义 test_step() 评估 Keras 中使用自定义 train_step() 的模型时设置“training=False”?
- wordpress - 使用插件重定向整个网站(wordpress)还是使用托管公司(godaddy)更好
- maven - -Dcucumber.options 被 mvn 测试忽略
- c# - 带句点的 ASP Net Core 十进制输入变成整数
- git - Git:如何在不暂存文件进行删除的情况下取消跟踪文件
- javascript - javascript深度克隆无法正常工作
- oracle - 在 WebLogic 12c 服务器上启动管理服务器时出错
- excel - 转置一列并保持相对值