我有一个基本的中间件,它是一个 Logger 函数,当我body, err := ioutil.ReadAll(r.Body)在接下来的每个函数中执行时,http.Request 将为空。但我希望身体包含信息。我能做些什么?
开始:
r.HandleFunc("/login", server.Loger(server.GetTokenHandler()).ServeHTTP).Methods("POST")
所以它是中间件:
func (server Server) Loger(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, _ := ioutil.ReadAll(r.Body)
server.Log.Info(r.URL, " Methods: ", r.Method, string(body))
h.ServeHTTP(w, r) //Calls handler h
})
}
现在 r.Body 将为空:
func (server Server) GetTokenHandler() http.Handler{
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, err := ioutil.ReadAll(r.Body)
if err != nil{
http.Error(w, "", 400)
server.Log.Error(err)
return
}
fmt.Print(string(body))
})
}
DIEA
相关分类