J'ai une fonction que je l'utilise comme emballage pour chaque demande GET:Puis-je utiliser ma fonction comme `middleware negroni`
type HandlerFunc func(w http.ResponseWriter, req *http.Request) (interface{}, error)
func WrapHandler(handler HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, req *http.Request) {
data, err := handler(w, req)
if err != nil {
log.Println(err)
w.WriteHeader(500)
} else {
w.Header().Add("Content-Type", "application/json")
resp, _ := json.Marshal(data)
w.Write(resp)
}
}
}
routeur
:
router.HandleFunc("/rss/unread/{rss_type}",
controllers.WrapHandler(controllers.GetUnreadRssFeeds))
exemple:
func GetUnreadRssFeeds(w http.ResponseWriter, r *http.Request) (interface{}, error) {
vars := mux.Vars(r)
rss_type, err := strconv.Atoi(vars["rss_type"])
feeds, err := (&postgres.FeedService{}).GetUnreadRssFeeds(rss_type)
return feeds, err
}
Maintenant, j'ai besoin d'envelopper chaque demande dans le routeur: controllers.WrapHandler(controllers.GetUnreadRssFeeds)
. Je cherche le moyen de l'éviter.
Puis-je transformer mon WrapHandler
pour l'utiliser comme negroni
middleware? Existe-t-il un moyen de transmettre des données entre les fonctions middleware negroni
?
Copie possible de [Comment est-ce que je peux combiner Go modèle de middleware avec l'erreur de renvoi des gestionnaires de demande?] (Http://stackoverflow.com/questions/42871194/how-can-i-combine-go-middleware-pattern-with- error-return-request-handlers) – Zoyd