登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-08 22:51:30 135浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《如何在中间件 go-chi 中获取路由》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

要检查授权,我需要知道授权中间件内的路由。我检查了 go-chi 的文档并这样做了:

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,则处理程序已执行(将结果写入客户端)

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


解决方案


根据https://medium.com/@szablowska.patrycja/chi-and-missing-urlparam-in-middleware-9435c48a063b解决

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)
    })
})

今天关于《如何在中间件 go-chi 中获取路由》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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