httprouter и negroni для публичного и частного промежуточного программного обеспечения - PullRequest
1 голос
/ 19 октября 2019

Мне трудно понять, как использовать негрони и httprouter вместе.

У меня есть несколько общедоступных маршрутов, таких как /api/v1/ping

У меня есть несколько личныхмаршруты, для которых требуется промежуточное программное обеспечение аутентификации, например /api/v1/user

Если я хочу negroni Common middleware для всех моих маршрутов, но я хочу применить промежуточное ПО аутентификации и другие только для частных маршрутов, как я могу установить это? вверх?

v1.router := httprouter.New()
v1.router.GET("/api/v1/ping", v1.ping)
v1.router.GET("/api/v1/user", v1.getUsers)

n := negroni.Classic()
n.UseHandler(v1.router)

http.ListenAndServe(port, n)

1 Ответ

1 голос
/ 19 октября 2019

Вы можете попробовать и адаптировать метод, описанный в " Middleware Path Prefix Middle in Go ", который использует net/http/#ServeMux, с другим маршрутизатором (gorilla/mux), но также должно быть действительным для julienschmidt/httprouter:

Указание промежуточного программного обеспечения на основе префиксов маршрута

Здесь происходит волшебство, иэто также может привести к путанице.

Простой способ, который я нашел, чтобы указать промежуточное ПО для префикса пути, - это настроить второй мультиплексор (мы используем переменную sirMuxalot для нашего ниже), который имеет префиксы путимы хотим применить промежуточное программное обеспечение, а затем передать наш оригинальный маршрутизатор, завернутый в некоторое промежуточное программное обеспечение, для этих маршрутов.

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

sirMuxalot := http.NewServeMux()
sirMuxalot.Handle("/", r)
sirMuxalot.Handle("/api/", negroni.New(
    negroni.HandlerFunc(APIMiddleware),
    negroni.Wrap(r),
))
sirMuxalot.Handle("/dashboard/", negroni.New(
    negroni.HandlerFunc(DashboardMiddleware),
    negroni.Wrap(r),
))

n := negroni.Classic()
n.UseHandler(sirMuxalot)
http.ListenAndServe(":3000", n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...