是否可以使用Gorilla's context.ClearHandler()
作为Negroni的中间件,就像我看到它用作Alice的中间件一样?类似的东西:
n.Use(context.ClearHandler())
目前我在每次回复后都打电话给context.Clear(r)
,但我宁愿整理一下来自动处理。我目前收到以下错误:
cannot use context.ClearHandler() (type http.Handler) as type negroni.Handler in argument to n.Use:
http.Handler does not implement negroni.Handler (wrong type for ServeHTTP method)
have ServeHTTP(http.ResponseWriter, *http.Request)
want ServeHTTP(http.ResponseWriter, *http.Request, http.HandlerFunc)
但我不确定错误消息告诉我的是什么。
答案 0 :(得分:4)
Negroni.Use()
需要negroni.Handler
类型的参数,但Gorilla的context.ClearHandler()
会返回http.Handler
类型的值。
好的是,有一种替代Negroni.UseHandler()
方法需要http.Handler
才能使用它。请注意,context.ClearHandler()
还需要另一个http.Handler
:
otherHandler := ... // Other handler you want to clear
n.UseHandler(context.ClearHandler(otherHandler))
Router
包中的gorilla/mux
会在请求生命周期结束时自动调用context.Clear()
,因此如果您使用它,则无需使用清除上下文context.ClearHandler()
。您只需将其用于其他/自定义处理程序(除非您想手动调用context.Clear()
)。