【发布时间】:2017-09-19 05:46:35
【问题描述】:
我正在构建一个在处理路由时支持各种中间件功能的 Go Web 应用程序。我正在尝试尽可能地坚持net/http,并且想知道如何在不使用negroni之类的中间件库的情况下完成此操作。
基本上,我想做的是能够提供一个中间件功能,一个用于记录,一个用于检查有效的 JWT,最后是处理请求的处理程序。
我可以通过定义以下结构来相当简单地用 negroni 做到这一点:
// Route ..
type Route struct {
Method string
Path string
Middleware []negroni.Handler
Handler http.HandlerFunc
}
然后定义如下路线:
var commonRoutes = []Route{
{
Method: "GET",
Path: "/info",
Middleware: []negroni.Handler{negroni.HandlerFunc(middleware.CheckCache), negroni.HandlerFunc(middleware.Authenticated), negroni.NewLogger()},
Handler: handlers.APIInfo,
},
}
最后,当我启动服务器时,我会导入路由列表并像这样注册它们:
for _, r := range routes {
handler := append(r.Middleware, negroni.Wrap(r.Handler))
router.Handle(r.Path, negroni.New(handler...)).Methods(r.Method)
}
这很完美。
知道如何仅使用标准的net/http 签名和定义中间件处理程序的方式来做到这一点,如下所示:
http.Handle("/", middlewareOne(middlewareTwo(finalHandler)))
谢谢你:)
【问题讨论】:
标签: go slice middleware