我很难理解如何一起使用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)
您可以尝试将“ Path Prefix Middleware in Go ”中描述的技术与另一路由器(net/http/#ServeMux
)配合使用,该技术正在使用net/http/#ServeMux
,但对gorilla/mux
也应有效:
基于路由前缀指定中间件
这是魔术发生的地方,也是令人困惑的地方。
我发现为路径前缀指定中间件的简便方法是设置第二个多路复用器(我们在下面使用
gorilla/mux
变量),该多路复用器具有要向其中应用中间件的路径前缀,然后传入我们的原始路由器封装在这些路由的中间件中。这是可行的,因为除非我们定义的路径前缀与传入的Web请求的路径匹配,否则
julienschmidt/httprouter
路由器将永远不会调用中间件包装的路由器。julienschmidt/httprouter