Подключите промежуточное ПО к маршрутам, подключенным к маршрутизатору - PullRequest
0 голосов
/ 27 января 2020

Это может быть просто из-за моей неопытности, но я принял решение веб-сервера, написанное в Go, и у меня есть некоторые проблемы.

Маршрутизация настроена таким образом, что каждый «верхний» маршрут подключается к маршрутизатору с помощью router.Mount () с обработчиком, подключенным к каждому подключенному маршруту. Пример:

router.Mount("/group", (handler.NewGroupHandler(groupSrv, render)).Router())

Итак, в этом смонтированном маршруте я хочу добавить промежуточное ПО для получения указанного c параметра URL. Я пробовал и следовал этому руководству https://medium.com/@szablowska.patrycja / chi-and-missing-urlparam-in-middleware-9435c48a063b , которое, похоже, сработало для других. Тем не менее, это не сработало для меня, что я теперь подозреваю, из-за подхода с монтажом.

Идея промежуточного программного обеспечения довольно проста, просто проверьте параметр URL на соответствие некоторым требованиям. Конечно, я мог бы делать это вручную на каждом пути, но промежуточное ПО было бы лучше как для удобочитаемости, так и для будущего развития. Как написано промежуточное программное обеспечение:

func GroupMiddleware() func(next http.Handler) http.Handler {
    return func(next http.Handler) http.Handler {
        fn := func(w http.ResponseWriter, r *http.Request) {
            groupIDStr := chi.URLParam(r, "group_id")
            if checkAgainstGroupID {
                // Do something, raise error
            } else {
                next.ServeHTTP(w, r)
            }
        }

        return http.HandlerFunc(fn)
    }
}

И затем применяется так:

r.With(subhandler.GroupMiddleware).Route("/{group_id}", func(r chi.Router) {
    r.Get("/", h.get)
})

Что, очевидно, не работает. Буду признателен за любую помощь, потому что я не могу поверить, что монтирование маршрутов делает невозможным добавление промежуточного программного обеспечения в подгруппы.

Редактировать: Это работало отлично, только я не заметил, что я назвал незатронутый маршрут. Поэтому, если кому-то еще придется ответить на этот же вопрос, знайте, что это действительно правильный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...