Я хочу иметь другое промежуточное ПО для разных путей. Моя текущая реализация взята из этой ссылки.
UserRouter := mux.NewRouter().StrictSlash(true)
AdminRouter := mux.NewRouter().StrictSlash(true)
Router.HandleFunc("/apps/{app_name}/xyz", Handler).Methods("GET")
Я создал три разных маршрутизатора, чтобы связать их с разными путями и промежуточным ПО.
nUserPath := negroni.New(middleware.NewAuthMiddleWare())
nUserPath.UseHandler(UserRouter)
nAdminPath := negroni.New()
nAdminPath.UseHandler(AdminRouter)
Я создал два разных экземпляра negroni и передал им соответствующие маршрутизаторы. Поскольку я хотел, чтобы все это запускало часть одного и того же приложения на одном и том же порту, поэтому я создал Wrapper Router и экземпляр negroni и связал их с существующим, как показано ниже.
BaseRouter := mux.NewRouter().StrictSlash(true)
BaseRouter.Handle(UserBasePath,nUserPath) // UserBasePath is `/apps`
BaseRouter.Handle(HealthCheck,nUserPath) // HealthCheck is `/health`
BaseRouter.Handle(AdminBasePath,nAdminPath) // AdminBasePath is `/Admin`
n := negroni.New(middleware.NewLogger()) // attached other common middleware here
n.UseHandler(router.BaseRouter)
n.Run(":8080")
Проблемы, возникающие при таком подходе:
Когда я запускаю /health
, он работает правильно, но когда я запускаю /apps/{app_name}/something
, я получаю 404: Not Found
Примечание. Я использовал другие подходы, упомянутые в ссылке ниже, но они не удовлетворяют мои потребности.