Ich versuche, eine einfache http MiddleWare-Handler schreiben, die eine http-Antwort verarbeitet. Leider funktioniert es nicht und ich kann nicht herausfinden, welchen Fehler ich mache. Jede/jede Hilfe wird geschätzt!Erweitern GoLang's http.ResponseWriter-Funktionalität zu Pre/Post-Prozess Antworten
Ich bin mit Go Gorilla-Mux-Router Hier sind illustrativ Teile des Codes:
import (
"fmt"
"log"
"github.com/gorilla/mux"
)
:
func Start() {
router := mux.NewRouter()
router.HandleFunc("/", myHandler)
:
log.Fatal(http.ListenAndServe(":8088", Middleware(router)))
}
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "myHandler called")
}
func Middleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
neww := NewProcessor(w)
h.ServeHTTP(neww, r)
})
}
type Processor struct {
http.ResponseWriter
}
func (r *Processor) Write(b []byte) (int, error) {
fmt.Printf("******* Processor writing...")
log.Print(string(b)) // log it out
return r.Write(b) // pass it to the original ResponseWriter
}
func NewProcessor(w http.ResponseWriter) http.ResponseWriter {
fmt.Printf("******* Creating new Processor...")
return &Processor{ResponseWriter: w}
}
Der Ausgang I ist unten (Text aus Gründen der Übersichtlichkeit weggelassen zusätzliche Protokollierung) aufgelistet bekommen:
******* Creating new Processor
myHandler called
Beachten Sie jedoch, dass die Nachricht "******* Prozessor schreiben ..." nicht angezeigt wurde, was darauf hinweist, dass die Funktion "Schreiben" nicht aufgerufen wurde.
Welche Änderungen müssen vorgenommen werden, damit die Funktion "Write" aufgerufen werden kann?