Gorilla mux - 在将请求传递给路由器之前修改请求
Gorilla mux - modify request before passing it to routers
有没有办法在 *http.Request
对象被解析并转发给 Gorilla mux router 处理程序之前捕获它?
例如,我们有一些路由映射及其处理程序:
r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
我打算使用动态语言前缀(2 个符号)。示例:
没有语言代码(默认语言选项):
https://example.com/products/1
https://example.com/articels/2
语言代码:
https://example.com/ru/products/1
https://example.com/ru/articels/2
有没有办法在中间件中捕获完整的 URL,提取语言(如果存在),然后在进行一些修改后将其传递给 Gorilla mux 路由器?它将有助于打造美丽的 URLs:
https://example.com/products/1 <- default language
https://example.com/ru/products/1 <- russian language (same resource but in different language)
看起来比这个变体更有吸引力:
https://example.com/en/products/1 <- mandatory default language
https://example.com/ru/products/1 <- russian language
类似这样的方法可能会起作用:
r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
m := http.NewServeMux()
m.HandeFunc("/", func(w http.ResponseWriter, req *http.Request) {
// do something with req
r.ServeHTTP(w, req)
})
http.ListenAndServe(":8080", m)
有没有办法在 *http.Request
对象被解析并转发给 Gorilla mux router 处理程序之前捕获它?
例如,我们有一些路由映射及其处理程序:
r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
我打算使用动态语言前缀(2 个符号)。示例:
没有语言代码(默认语言选项):
https://example.com/products/1
https://example.com/articels/2
语言代码:
https://example.com/ru/products/1
https://example.com/ru/articels/2
有没有办法在中间件中捕获完整的 URL,提取语言(如果存在),然后在进行一些修改后将其传递给 Gorilla mux 路由器?它将有助于打造美丽的 URLs:
https://example.com/products/1 <- default language
https://example.com/ru/products/1 <- russian language (same resource but in different language)
看起来比这个变体更有吸引力:
https://example.com/en/products/1 <- mandatory default language
https://example.com/ru/products/1 <- russian language
类似这样的方法可能会起作用:
r := mux.NewRouter()
r.HandleFunc("/products/{key}", ProductHandler)
r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
m := http.NewServeMux()
m.HandeFunc("/", func(w http.ResponseWriter, req *http.Request) {
// do something with req
r.ServeHTTP(w, req)
})
http.ListenAndServe(":8080", m)