GO中不同的路径如何使用不同的中间件?

How to use different middlewares for different paths in GO?

您好,我正在使用 justinas/alice,我想根据路径创建不同的中间件。即,如果我有路径 1 和路径 2,我想为路径 1 应用 m1、m2、m3,为路径 2 应用 m1、m2

我试过了:

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 {

    }

我该怎么做?

您需要将 routerrouter 的处理程序设置为从 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)