#go #middleware
#Вперед #промежуточное программное обеспечение
Вопрос:
Привет, я использую justinas / alice и хочу создавать разные промежуточные программы на основе путей. то есть, если у меня есть пути 1 и пути 2, я хочу применить m1, m2, m3 для пути 1 и m1, m2 для пути 2
Я пытался:
- Сначала создаем два мультиплексорных маршрутизатора:
router := mux.NewRouter()
router2 := mux.NewRouter()
- Назначьте им пути:
router.HandleFunc(path1,Func1)
router2.HandleFunc(path2,Func2)
- Тогда я хотел иметь что-то вроде этого
middlewares:=alice.New(m1,m2).Then(router2)
— Тогда:
middlewaress:=middlewares.Append(middlewares)
if err := http.ListenAndServe(fmt.Sprintf(":%d", sconf.Server.Port), middlewaress); err != nil {
}
как я могу сделать что-то подобное?
Ответ №1:
Вам нужно разрешить устанавливать обработчики для router
и router
для возвращаемой цепочки alice
.
// define routers
router := mux.NewRouter() // assuming this is gorilla mux
router2 := mux.NewRouter()
// create alice chains
chain1 := alice.New(m1, m2, m3).Then(func1)
chain2 := alice.New(m1, m2).Then(func2)
// set chains as path handlers
router.HandleFunc(path1, chain1)
router2.HandleFunc(path2, chain2)
Комментарии:
1. это приводит к ошибке: невозможно использовать func1 (введите func(http.ResponseWriter, *http. Запрос)) как тип http. Обработчик в аргументе для алисы. Создать (m1, m2, m3).Затем
2. @user6638204 вы должны обернуть свою функцию в
http.HandlerFunc
ala.Then(http.HandlerFunc(func1))