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

时间:2016-10-11 10:05:05

标签: go middleware

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

我试过了:

  • 首先创建两个mux路由器:

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 个答案:

答案 0 :(得分:1)

您需要将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)