2016-10-11 44 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

相關問題