【问题标题】:gorilla mux subrouter empty pathgorilla mux 子路由器空路径
【发布时间】:2014-09-08 08:40:44
【问题描述】:

我想创建一个 /user 子路由器如下

user := app.Router.PathPrefix("/user").Subrouter()
user.HandleFunc("/create", (&controllers.User{c}).Create)
user.HandleFunc("", (&controllers.User{c}).Create).Methods("POST")
user.HandleFunc("", (&controllers.User{c}).FindAll).Methods("GET")
user.HandleFunc("/{id}", (&controllers.User{c}).Update).Methods("PUT")
user.HandleFunc("/{id}", (&controllers.User{c}).Destroy).Methods("DELETE")
user.HandleFunc("/{id}", (&controllers.User{c}).FindOne).Methods("GET")

问题是域/用户确实有效。我可以这样做

user.HandleFunc("/", (&controllers.User{c}).Create).Methods("POST")

但它只匹配域/用户/ 知道如何解决这个问题

【问题讨论】:

    标签: go gorilla


    【解决方案1】:

    如果将严格斜线设置为 true 对您不起作用,那么您可能必须在路由器中处理不带斜线的路由,而不是使用子路由器:

    app.Router.HandleFunc("/user", (&controllers.User{c}).Create).Methods("POST")
    app.Router.HandleFunc("/user", (&controllers.User{c}).FindAll).Methods("GET")
    

    【讨论】:

      【解决方案2】:

      您可以将路由器的strict slash 设置为true,以便/domain/user 重定向到/domain/user/

      你需要在顶部有:

      app.Router.StrictSlash(true)
      

      并将路线设置为:

      user.HandleFunc("/", (&controllers.User{c}).Create).Methods("POST")
      user.HandleFunc("/", (&controllers.User{c}).FindAll).Methods("GET")
      

      【讨论】:

      • 它对我来说不是一个好的选择,因为它会降低性能并且它不适用于我的帖子请求