英文:
Negroni and Gorilla Context ClearHandler
问题
是否可以像在Alice中将Gorilla的 context.ClearHandler()
用作Negroni的中间件一样使用?类似于:
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)
但我不确定错误消息告诉我什么。
英文:
Is is possible to use Gorilla's context.ClearHandler()
as middleware for Negroni like I've seen it used as middleware for Alice? Something like:
n.Use(context.ClearHandler())
At the moment I'm calling context.Clear(r)
after every response but I would prefer the tidying up to be taken care of automatically. I'm currently getting the following error:
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)
But I'm not sure what the error message is telling me.
答案1
得分: 4
Negroni.Use()
期望一个 negroni.Handler
类型的参数,但 Gorilla 的 context.ClearHandler()
返回的是一个 http.Handler
类型的值。
好消息是,有一个替代方法 Negroni.UseHandler()
,它期望一个 http.Handler
,所以只需使用它即可。请注意,context.ClearHandler()
也期望另一个 http.Handler
:
otherHandler := ... // 要清除的其他处理程序
n.UseHandler(context.ClearHandler(otherHandler))
注意:
gorilla/mux
包中的 Router
在请求生命周期结束时自动调用 context.Clear()
,所以如果你在使用它,就不需要使用 context.ClearHandler()
清除上下文。你只需要在其他/自定义处理程序中使用它(除非你想手动调用 context.Clear()
)。
英文:
Negroni.Use()
expects a parameter of type negroni.Handler
but Gorilla's context.ClearHandler()
returns a value of type http.Handler
.
Good thing is that there is an alternative Negroni.UseHandler()
method which expects an http.Handler
so just use that. Note that context.ClearHandler()
also expects another http.Handler
:
otherHandler := ... // Other handler you want to clear
n.UseHandler(context.ClearHandler(otherHandler))
Notes:
The Router
from the gorilla/mux
package automatically calls context.Clear()
at the end of a request lifetime, so if you are using it you don't need to clear the context using context.ClearHandler()
. You only need to use it for other / custom handlers (unless you want to call context.Clear()
manually).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论