Как использовать разные промежуточные программы для разных путей в GO?

#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))