登录
首页 >  Golang >  Go问答

Gorilla mux - 在将请求传递给路由器之前修改请求

来源:stackoverflow

时间:2024-04-23 19:42:35 481浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《Gorilla mux - 在将请求传递给路由器之前修改请求》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

有没有办法在解析 *http.request 对象并将其转发到 gorilla mux 路由器处理程序之前捕获该对象?

例如,我们有一些路由映射及其处理程序:

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 路由器?它将有助于构建漂亮的 url:

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)

今天关于《Gorilla mux - 在将请求传递给路由器之前修改请求》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>