第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

中間件 chi.Use 與 chi.With 的區(qū)別

中間件 chi.Use 與 chi.With 的區(qū)別

Go
守著星空守著你 2022-12-19 21:40:03
使用 Chi router 設(shè)置中間件時(shí)chi.Use和之間有什么區(qū)別。chi.With
查看完整描述

3 回答

?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

Use必須在同一組下的所有路由之前聲明,而r.With允許您“內(nèi)聯(lián)”中間件。


事實(shí)上,函數(shù)簽名是不同的。Use什么都不返回,With返回一個(gè)chi.Router.


假設(shè)您有一條路線并且只想向其中之一添加中間件,您可以使用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)

}

在第一個(gè)示例中,someMiddleware為所有子路由聲明,而在第二個(gè)示例中r.With允許您僅為/other-route/gamma路由添加中間件。


查看完整回答
反對(duì) 回復(fù) 2022-12-19
?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊

根據(jù)chi.Usechi.With的文檔。

使用將中間件處理程序附加到 Mux 中間件堆棧。

任何 Mux 的中間件堆棧將在搜索到特定處理程序的匹配路由之前執(zhí)行,這提供了提前響應(yīng)、更改請(qǐng)求執(zhí)行過程或?yàn)橄乱粋€(gè) http.Handler 設(shè)置請(qǐng)求范圍值的機(jī)會(huì)。

With 為端點(diǎn)處理程序添加內(nèi)聯(lián)中間件。


查看完整回答
反對(duì) 回復(fù) 2022-12-19
?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

讓我們看看如何chi.Usechi.With例子

用例非常簡(jiǎn)單,chi.Use注冊(cè)的中間件將在所有注冊(cè)到的路由處理程序之前運(yùn)行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)

例如:這里L(fēng)ogger的中間件將在所有注冊(cè)路由處理程序之前被調(diào)用。


而隨著chi.With您返回中間件將在其上運(yùn)行的新路由,因此如果在返回Router的注冊(cè)中間件上注冊(cè)了任何路由,則注冊(cè)的中間件將運(yùn)行。這里的用例非常具體假設(shè)如果你想為一組路由運(yùn)行特定的中間件或者想要為特定的路由執(zhí)行一些操作那么你可以使用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中間件只會(huì)被所有的文章調(diào)用,如果有任何中間件在主路由上注冊(cè),那么其他路由/articles/的/{month}-{day}-{year}日間路由將不會(huì)被調(diào)用。chi.Withchi.Use


查看完整回答
反對(duì) 回復(fù) 2022-12-19
  • 3 回答
  • 0 關(guān)注
  • 314 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)