2016-10-11 19 views
0

こんにちは私はjustinas/aliceを使用しています。パスに基づいて異なるミドルウェアを作成したいと思います。つまり、私はパス1とパス2を持っている場合、私はM1、M2を適用したい、パス1とM1のため立方メートル、パス2GOで異なるミドルウェアを異なるパスに使用するにはどうすればよいですか?

用平方メートル私が試した:

  • を最初の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

返品チェーンに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

これを実行するとエラーにつながる:alice.Newに引数タイプhttp.Handlerとしてはfunc1(タイプFUNC(http.ResponseWriter、* http.Request))を使用することはできません(M1、M2、M3).Then – user6638204

+0

@ user6638204あなたの関数を 'http.HandlerFunc' ala'にラップする必要があります。(http.HandlerFunc(func1)) ' – michael60612

関連する問題