我正在構建一個Go Web應用程序,它在處理路由時支持各種中間件功能。我試圖儘可能地堅持net/http
,並想知道如何在不使用中間件庫(如negroni)的情況下完成此操作。嵌套函數從切片
本質上,我想要做的是能夠提供一箇中間件功能片,例如一個用於日誌記錄,一個用於檢查有效的JWT,然後是處理請求的處理程序。
我能夠通過定義下面的結構與內格羅尼做到這一點相當簡單:
// 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)))
謝謝:)