Установить субмаршрутизатор gorilla mux

Если у меня есть 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)

Надеюсь, я понимаю ...


person Rikard    schedule 03.01.2016    source источник
comment
Разве ты не можешь просто позвонить subrouter.PathPrefix?   -  person kopiczko    schedule 04.01.2016
comment
А как создается subrouter?   -  person kopiczko    schedule 04.01.2016
comment
@kopiczko, тогда субмаршрутизатор должен знать префикс пути, который мне не нужен   -  person Rikard    schedule 04.01.2016
comment
Между тем, я должен создать маршрутизатор через SubRouter и передать его методу RegisterRoutes.   -  person Rikard    schedule 11.01.2016


Ответы (2)


Я чувствую то же самое, и мне приходится жить с тем же «обходным путем». Я хочу установить субмаршрутизатор на существующий маршрутизатор. Нравиться:

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

Это позволило бы моему api чувствовать себя более автономным / слабосвязанным. Но получить субмаршрутизатор - это все, что мы получили от гориллы.

s := r.PathPrefix("/api").Subrouter()
api.SetRoutes(s)
person MondayPaper    schedule 16.02.2016

Сделать это можно так:

файл пакета 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())
person Sirex2003    schedule 25.09.2019