go - 如何使用多个 negroni.Wrap()

标签 go

我在实现中间件时遇到问题 我想使用 negroni.Wrap 函数来验证用户位置,下面是调用处理程序的方法:

r.Handle("/users/{userID}", negroni.New(
        negroni.HandlerFunc(validateTokenMiddleware),
        negroni.Wrap(&userLocation),
        negroni.Wrap(&userDetailHandler),
    )).Methods("GET")

&userLocation 是包含数据库信息的结构的对象,这里当我请求处理程序时,这两个 wrap 一起执行。但我想先执行 &userlocation ,如果发生任何错误,所以 next wrap 不应该执行,如何解决这个问题。

谢谢。

最佳答案

使用具有 ServeHttp 方法的中间件,该方法将使用 userDetailHandler 作为中间件内的接收器调用。并将您的 db 结构作为参数传递给中间件。你应该使用单包装。

r.Handle("/users/{userID}", negroni.New(
        negroni.HandlerFunc(validateTokenMiddleware),
        negroni.Wrap(userDetailHandler.Middleware(&userLocation)),
    )).Methods("GET")

func (userDetailHandler *UserDetailHandler)Middleware(res http.ResponseWriter, req *http.Request, userLocation *userLocation){
   // use your serve Http inside this
   userDetailHandler.ServeHttp(res, req)
}

关于go - 如何使用多个 negroni.Wrap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034014/

相关文章:

go - 从 zipkintracer 获取 traceId

python - grpc Deadline Exceeded错误如何解决?

google-app-engine - 应用程序引擎在go中读取本地文件

Golang 将任何结构存储在其他结构字段中

go - 在Go二进制文件中查找最大的导入包

go - 在汇合的kafka go中阅读来自kafka主题的消息时,如何使用确认?

random - 从 Go Slice 中选择一个随机值

linux - 无法从 git clone go.googlesource.com 克隆 Git 存储库

mongodb - golang中的条件聚合查询

performance - for循环速度比较