2016-10-11 104 views
0

您好我正在使用justinas/alice,我想根据路径创建不同的中间件。也就是说,如果我有PATH1和PATH2,我想申请M1,M2,M3的路径1和M1,M2的路径2如何在GO中为不同的路径使用不同的中间件?

我想:

  • 首先建立两个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

您需要设置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) 
+0

这样做导致了一个错误:不能使用的func1(类型FUNC(http.ResponseWriter,* http.Request))作为类型http.Handler在争论alice.New(M1,M2,M3)。然后 – user6638204

+0

@ user6638204你必须将你的函数包装在'http.HandlerFunc' ala'中。然后(http.HandlerFunc(func1))' – michael60612

相关问题