func New() *WharfMaster { middle := interpose.New() // Logger middle.Use(middleware.GorillaLog()) // Header modification example middle.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { rw.Header().Set("X-Server-Name", "The Germinator") next.ServeHTTP(rw, req) }) }) // Inject router router := mux.NewRouter() middle.UseHandler(router) // Setup Routes router.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) { fmt.Fprintf(rw, "Ther once was a happy roach, he liked to do roachy stuff") }) //router.HandleFunc("/v1/entities", ctrl.EntityCreate).Methods("POST") //router.HandleFunc("/v1/entities", ctrl.EntityList).Methods("GET") return &WharfMaster{Middle: middle} }
func main() { middle := interpose.New() // First call middleware that may manipulate HTTP headers, since // they must be called before the HTTP body is manipulated // Using Gorilla framework's combined logger middle.Use(middleware.GorillaLog()) //Using Negroni's Gzip functionality middle.Use(middleware.NegroniGzip(gzip.DefaultCompression)) // Now call middleware that can manipulate the HTTP body // Define the router. Note that we can add the router to our // middleware stack before we define the routes, if we want. router := mux.NewRouter() middle.UseHandler(router) // Configure our router router.HandleFunc("/{user}", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the home page, %s!", mux.Vars(req)["user"]) }) // Define middleware that will apply to only some routes greenMiddle := interpose.New() // Tell the main router to send /green requests to our subrouter. // Again, we can do this before defining the full middleware stack. router.Methods("GET").PathPrefix("/green").Handler(greenMiddle) // Within the secondary middleware, just like above, we want to call anything that // will modify the HTTP headers before anything that will modify the body greenMiddle.UseHandler(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { rw.Header().Set("X-Favorite-Color", "green") })) // Finally, define a sub-router based on our love of the color green // When you call any url such as http://localhost:3001/green/man , you will // also see an HTTP header sent called X-Favorite-Color with value "green" greenRouter := mux.NewRouter().Methods("GET").PathPrefix("/green").Subrouter() //Headers("Accept", "application/json") greenMiddle.UseHandler(greenRouter) greenRouter.HandleFunc("/{user}", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the home page, green %s!", mux.Vars(req)["user"]) }) http.ListenAndServe(":3001", middle) }
func main() { middle := interpose.New() // Invoke the Gorilla framework's combined logger middle.Use(middleware.GorillaLog()) // Create a router to serve HTTP content at two paths // and tell our middleware about the router router := mux.NewRouter() middle.UseHandler(router) router.PathPrefix("/green").Subrouter().Handle("/{name}", Green(http.HandlerFunc(welcomeHandler))) router.Handle("/{name}", http.HandlerFunc(welcomeHandler)) http.ListenAndServe(":3001", middle) }
func main() { middle := interpose.New() // First apply any middleware that will not write output to http body // but which may (or may not) modify headers middle.Use(middleware.GorillaLog()) // Now apply any middleware that might modify the http body. This permits the // preceding middleware to alter headers router := mux.NewRouter() router.HandleFunc("/{user}", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the home page, %s!", mux.Vars(req)["user"]) }) middle.UseHandler(router) http.ListenAndServe(":3001", middle) }
func main() { middle := interpose.New() // First apply any middleware that will not write output to http body // Log to stdout. Taken from Gorilla middle.Use(middleware.GorillaLog()) // Gzip output that follows. Taken from Negroni middle.Use(middleware.NegroniGzip(gzip.DefaultCompression)) // Now apply any middleware that modify the http body. router := mux.NewRouter() middle.UseHandler(router) router.HandleFunc("/{user}", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the home page, %s!", mux.Vars(req)["user"]) }) http.ListenAndServe(":3001", middle) }