首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在中间件go-chi中获取路由

如何在中间件go-chi中获取路由
EN

Stack Overflow用户
提问于 2018-10-08 05:51:34
回答 1查看 5.2K关注 0票数 3

要检查授权,我需要知道授权中间件内部的路由。我查了一下go的文档然后就这么做了:

代码语言:javascript
复制
func Authenticator(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    // .............
    next.ServeHTTP(w, r)
    routePattern := chi.RouteContext(r.Context()).RoutePattern()
    fmt.Println("AUTHORIZATION:", routePattern, route)

    routepath := strings.Replace(routePattern, "/v1", "", 1) // todo use api prefix from config
    routepath = strings.Replace(routepath, "/*", "", 1)

    fmt.Println("ROUTEPATH:", routepath, route)

    if !CheckAuthorization(*token, routepath, method, "*", "*", "*") {
        http.Error(w, http.StatusText(401), 401)
        return
    }

    })
}

这给了我所需要的。但是现在显然已经通过了授权,所以如果检查routePattern,就已经执行了处理程序(将结果写入客户端)。

在检查next.ServerHTTP(w,r)之前,有没有其他方法可以在没有RoutePattern()的情况下获取中间件内部的路由?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-11 11:51:57

基于https://medium.com/@szablowska.patrycja/chi-and-missing-urlparam-in-middleware-9435c48a063b的解决方案

代码语言:javascript
复制
r := chi.NewRouter()
r.Route("/myroute", func(r chi.Router) {
    r.With(myMiddleware).Route("/{myparam}", func(r chi.Router) {
        r.Get("/", getHandler)
        r.Put("/", putHandler)
    })
})
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52696109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档