杨魅力
让我们看看如何chi.Use和chi.With例子用例非常简单,chi.Use注册的中间件将在所有注册到的路由处理程序之前运行Routerr := 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.User.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