J'essaie d'ajouter un middleware seulement sur certaines routes. J'ai écrit ce code:Subroutes middlewares avec Gorilla MUX et Negroni
func main() {
router := mux.NewRouter().StrictSlash(false)
admin_subrouter := router.PathPrefix("/admin").Subrouter()
//handlers.CombinedLoggingHandler comes from gorilla/handlers
router.PathPrefix("/admin").Handler(negroni.New(
negroni.Wrap(handlers.CombinedLoggingHandler(os.Stdout, admin_subrouter)),
))
admin_subrouter.HandleFunc("/articles/new", articles_new).Methods("GET")
admin_subrouter.HandleFunc("/articles", articles_index).Methods("GET")
admin_subrouter.HandleFunc("/articles", articles_create).Methods("POST")
n := negroni.New()
n.UseHandler(router)
http.ListenAndServe(":3000", n)
}
Je me attends à des journaux de demande uniquement pour les chemins avec le préfixe/admin. Je vois une ligne de journal quand je fais "GET/admin", mais pas quand je fais "GET/admin/articles/new". J'ai essayé par force brute d'autres combinaisons mais je ne peux pas l'obtenir. Qu'est ce qui ne va pas avec mon code? J'ai vu d'autres façons, comme envelopper le HandlerFunc sur chaque définition d'itinéraire, mais je voulais le faire une fois pour un préfixe ou un sous-programme.
Le middleware de journalisation que j'utilise ici est à tester, peut-être qu'un middleware Auth a plus de sens, mais je voulais juste le faire fonctionner.
Merci!
Ça marche, merci. Je voulais utiliser les middlewares disponibles sur les gestionnaires de paquets Gorilla. –
Ensuite, j'ai pu utiliser gestionnaire Gorilla faire:. 'router.PathPrefix ("/ admin") Handler (negroni.New ( \t negroni.Wrap (handlers.CombinedLoggingHandler (os.Stdout, adminBase)), \t)) ' –
Oui vous pouvez l'utiliser, juste pour démontrer la définition du sous-routeur je ne l'ai pas utilisé dans l'exemple. Désolé pour ça. – jeevatkm