特定路由(分组路由)

如果你需要一组路由功能,需要借助特定的路由中间件完成,做法很简单,只需建立一个新 Negroni 实例,传入路由处理器里即可。

  1. router := mux.NewRouter()
  2. adminRoutes := mux.NewRouter()
  3. // add admin routes here
  4.  
  5. // Create a new negroni for the admin middleware
  6. router.Handle("/admin", negroni.New(
  7. Middleware1,
  8. Middleware2,
  9. negroni.Wrap(adminRoutes),
  10. ))

如果你使用 Gorilla Mux, 下面是一个使用 subrouter 的例子:

  1. router := mux.NewRouter()
  2. subRouter := mux.NewRouter().PathPrefix("/subpath").Subrouter().StrictSlash(true)
  3. subRouter.HandleFunc("/", someSubpathHandler) // "/subpath/"
  4. subRouter.HandleFunc("/:id", someSubpathHandler) // "/subpath/:id"
  5.  
  6. // "/subpath" 是用来保证subRouter与主要路由连结的必要参数
  7. router.PathPrefix("/subpath").Handler(negroni.New(
  8. Middleware1,
  9. Middleware2,
  10. negroni.Wrap(subRouter),
  11. ))

With() 可被用来减少在跨路由分享时多余的中间件的冗余.

  1. router := mux.NewRouter()
  2. apiRoutes := mux.NewRouter()
  3. // 在此新增API路由
  4. webRoutes := mux.NewRouter()
  5. // 在此新增Web路由
  6.  
  7. // 建立通用中间件来跨路由分享
  8. common := negroni.New(
  9. Middleware1,
  10. Middleware2,
  11. )
  12.  
  13. // 为API中间件建立新的negroni
  14. // 使用通用中间件作底
  15. router.PathPrefix("/api").Handler(common.With(
  16. APIMiddleware1,
  17. negroni.Wrap(apiRoutes),
  18. ))
  19. // 为Web中间件建立新的negroni
  20. // 使用通用中间件作底
  21. router.PathPrefix("/web").Handler(common.With(
  22. WebMiddleware1,
  23. negroni.Wrap(webRoutes),
  24. ))