Ich entwickle eine Go-Webanwendung, die verschiedene Middlewarefunktionen beim Routing unterstützt. Ich versuche, so weit wie möglich zu net/http
zu bleiben und fragte mich, wie ich dies ohne die Verwendung von Middleware-Bibliotheken wie negroni erreichen könnte.Nest-Funktionen von Slice
Im Wesentlichen möchte ich in der Lage sein, ein Stück Middlewarefunktionen zu liefern, zum Beispiel eine für die Protokollierung, eine für die Suche nach einer gültigen JWT und schließlich den Handler für die Bearbeitung der Anfrage.
ich in der Lage bin das ziemlich einfach mit negroni zu tun, indem Sie die folgenden Struktur zu definieren:
// Route ..
type Route struct {
Method string
Path string
Middleware []negroni.Handler
Handler http.HandlerFunc
}
und dann definieren, eine Route wie:
var commonRoutes = []Route{
{
Method: "GET",
Path: "/info",
Middleware: []negroni.Handler{negroni.HandlerFunc(middleware.CheckCache), negroni.HandlerFunc(middleware.Authenticated), negroni.NewLogger()},
Handler: handlers.APIInfo,
},
}
Schließlich, wenn ich meinen Server booten, ich Importieren Sie die Liste der Routen und registrieren Sie sie wie folgt:
for _, r := range routes {
handler := append(r.Middleware, negroni.Wrap(r.Handler))
router.Handle(r.Path, negroni.New(handler...)).Methods(r.Method)
}
Und das funktioniert perfekt.
Jede Idee, wie ich in der Lage sein könnte, diese zu definieren, Middleware-Handler nur die Standard-net/http
Unterschrift und Weise mit dem zu tun, die wie folgt aussehen:
http.Handle("/", middlewareOne(middlewareTwo(finalHandler)))
Danke :)