2017-05-15 8 views
0

J'essaie d'utiliser Golang middleware pour exécuter après gestion de routage Gorilla Mux, afin de changer la réponse de chaque demande.Exécuter le middleware après la gestion mux Gorilla

Échantillon de code voir ci-dessous. Actuellement, il retourne «exécuter avant, exécuter le test», l'objectif est de retourner «exécuter avant, exécuter le test, exécuter après» en utilisant le middleware runsafter.

Est-ce que quelque chose comme ceci est possible avec Gorilla Mux?

package main 

import (
    "fmt" 
    "github.com/gorilla/mux" 
    "net/http" 
) 

func runsbefore(h http.Handler) http.Handler { 
    fn := func(w http.ResponseWriter, r *http.Request) { 
     w.Write([]byte("run before, ")) 
     h.ServeHTTP(w, r) 
    } 

    return http.HandlerFunc(fn) 
} 

func runsafter(h http.Handler) http.Handler { 
    fn := func(w http.ResponseWriter, r *http.Request) { 
     w.Write([]byte("run after, ")) 
     h.ServeHTTP(w, r) 
    } 

    return http.HandlerFunc(fn) 
} 

func runtest(w http.ResponseWriter, r *http.Request) { 
    w.Write([]byte("run test, ")) 
} 

func main() { 
    fmt.Println("Server starting on port 8000") 
    r := mux.NewRouter() 
    r.HandleFunc("/", runtest).Methods("GET") 
    http.ListenAndServe(":8000", runsbefore(r)) 
    // something like: http.ListenAndServe(":8000", runsbefore(r(runsafter))) 
} 

Répondre

0

Utilisez

http.ListenAndServe(":8000", runsAfter(runsbefore(r))) 

et corriger l'erreur dans runsAfter:

func runsafter(h http.Handler) http.Handler { 
    fn := func(w http.ResponseWriter, r *http.Request) { 
    h.ServeHTTP(w, r) 
    w.Write([]byte("run after, ")) 
    } 

    return http.HandlerFunc(fn) 
}