用于公用和专用路由中间件的httprouter和negroni

问题描述 投票:0回答:1

我很难理解如何一起使用negroni和httprouter。

我有两条公共路线,例如/api/v1/ping

我有一堆需要身份验证中间件的私有路由,例如/api/v1/user

如果我的所有路由都需要negroni通用中间件,但是我只想将auth中间件和其他中间件应用于私有路由,我该如何设置呢?

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)
go negroni
1个回答
0
投票

您可以尝试将“ Path Prefix Middleware in Go ”中描述的技术与另一路由器(net/http/#ServeMux)配合使用,该技术正在使用net/http/#ServeMux,但对gorilla/mux也应有效:

基于路由前缀指定中间件

这是魔术发生的地方,也是令人困惑的地方。

我发现为路径前缀指定中间件的简便方法是设置第二个多路复用器(我们在下面使用gorilla/mux变量),该多路复用器具有要向其中应用中间件的路径前缀,然后传入我们的原始路由器封装在这些路由的中间件中。

这是可行的,因为除非我们定义的路径前缀与传入的Web请求的路径匹配,否则julienschmidt/httprouter路由器将永远不会调用中间件包装的路由器。

julienschmidt/httprouter
© www.soinside.com 2019 - 2024. All rights reserved.