chi.Use使用 Chi 路由器設定中間件和chi.With設定中間件有什么區別。
uj5u.com熱心網友回復:
根據chi.Use和chi.With的檔案。
使用將中間件處理程式附加到 Mux 中間件堆疊。
任何 Mux 的中間件堆疊將在搜索到特定處理程式的匹配路由之前執行,這提供了提前回應、更改請求執行程序或為下一個 http.Handler 設定請求范圍值的機會。
為端點處理程式添加行內中間件。
uj5u.com熱心網友回復:
Use必須在同一組下的所有路由之前宣告,而r.With允許您“行內”中間件。
事實上,函式簽名是不同的。Use什么都不回傳,With回傳 a chi.Router。
假設您有一條路由,并且只想向其中一個添加中間件,您將使用r.With:
r.Route("/myroute", func(r chi.Router) {
r.Use(someMiddleware) // can declare it here
r.Get("/bar", handlerBar)
r.Put("/baz", handlerBaz)
// r.Use(someMiddleware) // can NOT declare it here
}
r.Route("/other-route", func(r chi.Router) {
r.Get("/alpha", handlerBar)
r.Put("/beta", handlerBaz)
r.With(someMiddleware).Get("/gamma", handlerQuux)
}
在第一個示例中,someMiddleware為所有子路由宣告,而在第二個示例中r.With,您可以僅為/other-route/gamma路由添加中間件。
uj5u.com熱心網友回復:
讓我們看看如何chi.Use和chi.With例子
用例非常簡單,chi.Use注冊的中間件將在所有注冊的路由處理程式之前運行Router
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("welcome"))
})
http.ListenAndServe(":3000", r)
例如:這里Logger的中間件將在所有注冊路由處理程式之前呼叫。
而與chi.With您一起回傳將運行中間件的新路由,因此如果在回傳Router的路由上注冊了任何路由,則注冊的中間件將運行。這里的用例非常具體,假設如果您想為一組路由運行特定的中間件,或者想為特定的路由執行一些操作,那么對于您可以使用的情況chi.Use
r.Route("/articles", func(r chi.Router) {
r.With(paginate).Get("/", listArticles) // GET /articles
r.With(paginate).Get("/{month}-{day}-{year}", listArticlesByDate) // GET /articles/01-16-2017
r.Post("/", createArticle) // POST /articles
r.Get("/search", searchArticles) // GET /articles/search
// Regexp url parameters:
r.Get("/{articleSlug:[a-z-] }", getArticleBySlug) // GET /articles/home-is-toronto
// Subrouters:
r.Route("/{articleID}", func(r chi.Router) {
r.Use(ArticleCtx)
r.Get("/", getArticle) // GET /articles/123
r.Put("/", updateArticle) // PUT /articles/123
r.Delete("/", deleteArticle) // DELETE /articles/123
})
})
在上面的例子中,paginate中間件只會被所有的文章呼叫/articles/,如果有任何中間件注冊到主路由上,則不會呼叫/{month}-{day}-{year}其他路由的每日路由,那么它將被呼叫。chi.Withchi.Use
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493497.html
