私はGoでjustinas/aliceミドルウェアを使用しています。ミドルウェアで使用されている関数に引数を渡します。例えばGoのアリスミドルウェアにパラメータを渡すにはどうすればよいですか?
:
middlewareChain := alice.New(Func1(foo string,foo2 string))
私はそれをどのように行うことができますか?
私はGoでjustinas/aliceミドルウェアを使用しています。ミドルウェアで使用されている関数に引数を渡します。例えばGoのアリスミドルウェアにパラメータを渡すにはどうすればよいですか?
:
middlewareChain := alice.New(Func1(foo string,foo2 string))
私はそれをどのように行うことができますか?
Motakjuq
で述べたように、オプションの引数を取るミドルウェアは、func (http.Handler) http.Handler
の署名である必要があるため、直接書くことはできません。
あなたのできることは、ミドルウェア機能を生成する関数を作ることです。
func middlewareGenerator(foo, foo2 string) (mw func(http.Handler) http.Handler) {
mw = func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Use foo1 & foo2
h.ServeHTTP(w, r)
})
}
return
}
次に、あなたは、すべての要求でFunc1
変化あなたのparamsは、あなたがに引数を渡すことができない場合はたぶん私は、あなたの質問を理解していなかった以下の
middlewareChain := alice.New(middlewareGenerator("foo","foo2"))
を行うことができます関数。
func Func1(foo, foo2, timeoutMessage string) alice.Constructor {
//... something to do with foo and foo2
return func(h http.Handler) http.Handler {
return http.TimeoutHandler(h, 1*time.Second, timeoutMessage)
}
}
そして、あなたはそれを
chain := alice.New(Func1("", "", "time out"))....
を使用したい場合は、ドキュメントをすることはできません:あなたの関数は、あなたがアリスに登録するとき、あなたは、必要な機能を返すようなことができ、いくつかのparamsを必要に応じてミドルウェアのfuncは 'func(http.Handler)http.Handler'の形式でなければなりません、あなたはセッションデータや他のストアメカニズムのような別のメソッドを見つけなければなりません。 – Motakjuq
また、コンテキストを使用してこれを行うオプションも追加したいと思っています。 – saarrrr