【问题标题】:How to implement sub-routes如何实现子路由
【发布时间】:2019-09-18 00:47:51
【问题描述】:

我想实现这样的路线

user/profile

user/cart

user/products

目前,我正在这样做

r.HandleFunc("user/signup", signupHandler).Methods("POST")
r.HandleFunc("user/signin", signinHandler).Methods("POST")
r.HandleFunc("user/profile", profileHandler).Methods("GET")
r.HandleFunc("user/cart", cartHandler).Methods("POST")
r.HandleFunc("user/products", productsHandler).Methods("GET")

如您所见,这些路由以 user 开头,所以我怎么知道它是 user 路由,所以我可以在不同的文件中发送处理它。

我想要类似的东西

r.HandleFunc("user/", handlerWhichHandelAllTheRequestFromUser)

它应该处理所有从users开始的URL。

我正在使用 mux gorilla

【问题讨论】:

  • 可以在复用路由中使用正则表达式:s.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)
  • 如果这是gorilla/mux,可以使用子路由器:userRouter:=r.Path("/user").Subrouter()
  • 是的。这是。 gorilla/mux谢谢!
  • 如果是net/http,那么您发布的代码将完全按照预期工作。 stdlib 路由器将带有斜杠的路由视为前缀处理程序。

标签: go gorilla


【解决方案1】:

mux 中有一个 PathPrefix 函数。在这种情况下,您可以使用它来制作路径前缀,即“/user”。

例子:-

userHandler.go

func makeUserHandler()http.Handler{
  //Define all you handlers here
  r := mux.NewRouter()
  r.HandleFunc("user/signup", signupHandler).Methods("POST")
  r.HandleFunc("user/signin", signinHandler).Methods("POST")
  r.HandleFunc("user/profile", profileHandler).Methods("GET")
  r.HandleFunc("user/cart", cartHandler).Methods("POST")
  r.HandleFunc("user/products", productsHandler).Methods("GET")
  return r
}

main.go

r := mux.NewRouter()
r.PathPrefix("/user").Handler(makeUserHandler())

请根据您的要求对上述代码进行必要的更改。

【讨论】:

  • 那么我怎么知道它是哪一个呢?是signup 还是makeUserHandler 内的“登录”?
  • 当 main.go 中匹配前缀路径时,它会将其转发到 makeUserHandler 路由器。从那里该路由器将匹配其路径,即“/signup”或“/signin”并调用适当的处理程序,即signupHandler或signinHandler。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2019-12-19
  • 2020-01-15
  • 2019-06-19
  • 1970-01-01
  • 2010-11-21
  • 2021-03-07
相关资源
最近更新 更多