go - 如何在 gorilla mux 中的 Get Subrouter 中为特定路由使用特定中间件
问题描述
我对 Gorilla mux 路由有一个特定要求,我想为一个子路由器下的不同路由添加不同的中间件(在我的例子中是 GET 子路由器)。下面是我的路由代码:
// create a serve mux
sm := mux.NewRouter()
// register handlers
postR := sm.Methods(http.MethodPost).Subrouter()
postR.HandleFunc("/signup", uh.Signup)
postR.HandleFunc("/login", uh.Login)
postR.Use(uh.MiddlewareValidateUser)
getR := sm.Methods(http.MethodGet).Subrouter()
getR.HandleFunc("/refresh-token", uh.RefreshToken)
getR.HandleFunc("/user-profile", uh.GetUserProfile)
在上面的路由器逻辑中,我的 /refresh-token 和 /user-profile 令牌都属于 getR 路由器。我还有两个名为 ValidateAccessToken 和 ValidateRefreshToken 的中间件函数。我想将 ValidateRefreshToken 中间件函数用于“/refresh-token”路由,并将 ValidateAccessToken 用于 GET 子路由器下的所有其他路由。我想用 Gorilla mux 路由本身来做到这一点。请建议我完成上述场景的适当方法。感谢您的时间和精力。
解决方案
notorious.no 提供的解决方案也非常适合给定的要求。我还遇到了另一个使用 PathPrefix 并解决相同问题的解决方案,并希望获得相同的建议。
// create a serve mux
sm := mux.NewRouter()
// register handlers
postR := sm.Methods(http.MethodPost).Subrouter()
postR.HandleFunc("/signup", uh.Signup)
postR.HandleFunc("/login", uh.Login)
postR.Use(uh.MiddlewareValidateUser)
refToken := sm.PathPrefix("/refresh-token").Subrouter()
refToken.HandleFunc("", uh.RefreshToken)
refToken.Use(uh.MiddlewareValidateRefreshToken)
getR := sm.Methods(http.MethodGet).Subrouter()
getR.HandleFunc("/greet", uh.Greet)
getR.Use(uh.MiddlewareValidateAccessToken)
使用参考来到这个解决方案:https ://github.com/gorilla/mux/issues/360
推荐阅读
- java - 如何验证地图
以编程方式使用 Spring Validator - javascript - JavaScript 抓取
- python-3.x - 如何在日期列中合并月日年列?
- google-apps-script - 如何让我的可安装触发器运行一次而不是两次?
- javascript - 找不到名称“ENV”returnTo:ENV.BASE_URI
- node.js - 使用 node-vault 访问 HashiCorp Vault KV secret
- machine-learning - 使用欧几里得距离对混合数据进行聚类
- facebook - 如何在 Nestjs facebook 策略回调 url 中传递动态参数
- python - 基于另一列的每个值的列值总和并将其除以总计
- list - 在列表中创建 Spark 数据框后如何使用它们?