特定路由(分组路由)
如果你需要一组路由功能,需要借助特定的路由中间件完成,做法很简单,只需建立一个新 Negroni 实例,传入路由处理器里即可。
- router := mux.NewRouter()
- adminRoutes := mux.NewRouter()
- // add admin routes here
- // Create a new negroni for the admin middleware
- router.Handle("/admin", negroni.New(
- Middleware1,
- Middleware2,
- negroni.Wrap(adminRoutes),
- ))
如果你使用 Gorilla Mux, 下面是一个使用 subrouter 的例子:
- router := mux.NewRouter()
- subRouter := mux.NewRouter().PathPrefix("/subpath").Subrouter().StrictSlash(true)
- subRouter.HandleFunc("/", someSubpathHandler) // "/subpath/"
- subRouter.HandleFunc("/:id", someSubpathHandler) // "/subpath/:id"
- // "/subpath" 是用来保证subRouter与主要路由连结的必要参数
- router.PathPrefix("/subpath").Handler(negroni.New(
- Middleware1,
- Middleware2,
- negroni.Wrap(subRouter),
- ))
With()
可被用来减少在跨路由分享时多余的中间件的冗余.
- router := mux.NewRouter()
- apiRoutes := mux.NewRouter()
- // 在此新增API路由
- webRoutes := mux.NewRouter()
- // 在此新增Web路由
- // 建立通用中间件来跨路由分享
- common := negroni.New(
- Middleware1,
- Middleware2,
- )
- // 为API中间件建立新的negroni
- // 使用通用中间件作底
- router.PathPrefix("/api").Handler(common.With(
- APIMiddleware1,
- negroni.Wrap(apiRoutes),
- ))
- // 为Web中间件建立新的negroni
- // 使用通用中间件作底
- router.PathPrefix("/web").Handler(common.With(
- WebMiddleware1,
- negroni.Wrap(webRoutes),
- ))