【问题标题】:Set gorilla mux subrouter设置 gorilla mux 子路由器
【发布时间】:2016-04-07 11:39:05
【问题描述】:

如果我有一个 mux.Router,如何将其设置为“子路由器”?我能找到的所有示例都通过调用 Route.Subrouter() 然后在其上设置处理程序来创建一个新路由器,但我已经有了一个路由器!

// does not know about "/api/v1/"
v1_router := mux.NewRouter()
subrouter.HandleFuc("/route1/", ...)
subrouter.HandleFuc("/route2/", ...)

// does not now about route1, route2
r := mux.NewRouter()
r.PathPrefix("/api/v1/").???(v1_router)

我希望我是有道理的......

【问题讨论】:

  • 你不能打电话给subrouter.PathPrefix吗?
  • subrouter 是如何创建的?
  • @kopiczko 然后子路由器必须知道我不想要的路径前缀
  • 同时,我通过 SubRouter 创建一个路由器并将其传递给“RegisterRoutes”方法

标签: go gorilla


【解决方案1】:

我也有同样的感觉,不得不接受同样的“解决方法”。我想将子路由器设置为现有路由器。喜欢:

r.PathPrefix("/api").SetSubrouter(api.GetRouter()) //won't work

这会让我的 api 感觉更加自主/松耦合。但是得到一个子路由器是我们从大猩猩那里得到的全部。

s := r.PathPrefix("/api").Subrouter()
api.SetRoutes(s)

【讨论】:

    【解决方案2】:

    你可以这样做:

    v1 包文件:

    func Handlers(subrouter *mux.Router) {
        //base handler, i.e. /v1
        r.StrictSlash(true)
        subrouter.HandleFuc("/route1/", ...)
        subrouter.HandleFuc("/route2/", ...)
    }
    

    主文件:

    r := mux.NewRouter()
    package.Handlers(r.PathPrefix("/api/v1").Subrouter())
    

    【讨论】: