Middleware in Go isoliert Probleme und erweitert Anforderungshandler um zusätzliche Funktionen. Das traditionelle Middleware-Muster beinhaltet die Ausführung von Handlern vor und nach dem Hauptanforderungshandler. Es fehlt jedoch die Unterstützung für die Fehlerbehandlung, was umständlich sein kann.
Um dieses Problem zu beheben, können wir Anforderungshandler zur Fehlerbehandlung verwenden, die wie folgt definiert sind:
type errorHandler func(http.ResponseWriter, *http.Request) error
Diese Handler ermöglichen es uns, Fehler direkt zurückzugeben, wodurch die Fehlerbehandlung intuitiver wird.
Um das Middleware-Muster mit Fehlerbehandlungshandlern zu kombinieren, führen wir eine zusätzliche Middleware ein, die als letzter Schritt in der Kette dient:
func errorHandler(h MyHandlerFunc) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := h(w, r) if err != nil { // Handle error here } }) }
Diese Middleware umschließt das Besondere Typ der Handlerfunktion MyHandlerFunc, die Fehler zurückgibt.
Um dieses Muster zu verwenden, wickeln Sie Ihr ein Fehlerbehandlungshandler mit der Middleware errorHandler und fügen Sie ihn am Ende der Middlewarekette hinzu:
moreMiddleware(myMiddleware(errorHandler(myhandleFuncReturningError)))
Betrachten Sie das folgende Beispiel:
func loggingHandler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Before executing the handler. start := time.Now() log.Printf("Started %s %s", r.Method, r.URL.Path) next.ServeHTTP(w, r) // After executing the handler. log.Printf("Completed %s in %v", r.URL.Path, time.Since(start)) }) } func errorHandle(w http.ResponseWriter, r *http.Request) error { w.Write([]byte(`Hello World from errorHandle!`)) return nil } func main() { http.Handle("/", errorHandler(errorHandle)) log.Fatal(http.ListenAndServe(":8080", nil)) }
In In diesem Beispiel ist loggingHandler eine herkömmliche Middleware, während errorHandle ein Fehlerbehandlungs-Anforderungshandler ist. Die errorHandler-Middleware umschließt errorHandle und stellt sicher, dass Fehler angemessen behandelt werden.
Das obige ist der detaillierte Inhalt vonWie kann Go Middleware effektiv mit Fehlern umgehen, die von Anforderungshandlern zurückgegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!