我很難理解如何一起使用 negroni 和 httprouter。我有幾條公共路線,例如/api/v1/ping我有一堆需要身份驗(yàn)證中間件的私有路由,例如/api/v1/user如果我想要所有路由都使用 negroni 通用中間件,但我想將 auth 中間件和其他中間件僅應(yīng)用于私有路由,我該如何設(shè)置?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 回答

神不在的星期二
TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以嘗試采用“?Go 中的路徑前綴中間件net/http/#ServeMux
”中描述的技術(shù),該技術(shù)將, 與另一個(gè)路由器 ( ) 一起使用,但也gorilla/mux
應(yīng)該有效:julienschmidt/httprouter
根據(jù)路由前綴指定中間件
這就是神奇發(fā)生的地方,也是事情變得混亂的地方。
我發(fā)現(xiàn)為路徑前綴指定中間件的簡單方法是設(shè)置第二個(gè)復(fù)用器(我們使用sirMuxalot
下面的變量),它具有我們想要應(yīng)用中間件的路徑前綴,然后傳入包裝在其中的原始路由器這些路由的一些中間件。
這是可行的,因?yàn)?code>sirMuxalot除非我們定義的路徑前綴與傳入的 Web 請求的路徑匹配,否則路由器永遠(yuǎn)不會調(diào)用中間件包裝的路由器。
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)
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報(bào)
0/150
提交
取消