func ExampleNewHandler() { c := xhandler.Chain{} // Install the metric handler with dogstatsd backend client and some env tags flushInterval := 5 * time.Second tags := []string{"role:my-service"} statsdWriter, err := net.Dial("udp", "127.0.0.1:8126") if err != nil { log.Fatal(err) } c.Use(xstats.NewHandler(dogstatsd.New(statsdWriter, flushInterval), tags)) // Here is your handler h := c.HandlerH(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Get the xstats request's instance from the context. You can safely assume it will // be always there, if the handler is removed, xstats.FromContext will return a nop // instance. m := xstats.FromRequest(r) // Count something m.Count("requests", 1, "route:index") })) http.Handle("/", h) if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) } }
func router(a *server) http.Handler { mux := xmux.New() c := xhandler.Chain{} c.Use(mwLogger) c.Use(mwAuthenticationCheck(a.key)) mux.GET("/sites", c.HandlerCF(xhandler.HandlerFuncC(a.handleAllSites))) mux.GET("/sites/:id", c.HandlerCF(xhandler.HandlerFuncC(a.handleSingleSite))) mux.GET("/torrents", c.HandlerCF(xhandler.HandlerFuncC(a.handleTorrents))) mux.POST("/download/:hash", c.HandlerCF(xhandler.HandlerFuncC(a.handleDownload))) return xhandler.New(context.Background(), mux) }
func ExampleChain() { c := xhandler.Chain{} // Append a context-aware middleware handler c.UseC(xhandler.CloseHandler) // Mix it with a non-context-aware middleware handler c.Use(cors.Default().Handler) // Another context-aware middleware handler c.UseC(xhandler.TimeoutHandler(2 * time.Second)) mux := http.NewServeMux() // Use c.Handler to terminate the chain with your final handler mux.Handle("/", c.Handler(xhandler.HandlerFuncC(func(ctx context.Context, w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the home page!") }))) // You can reuse the same chain for other handlers mux.Handle("/api", c.Handler(xhandler.HandlerFuncC(func(ctx context.Context, w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the API!") }))) }
func main() { c := xhandler.Chain{} c.Use(recoverMiddleware) c.Use(normalLoggingMiddleware) c.Use(log15LoggingMiddleware) c.Use(logrusLoggingMiddleware) simpleHandler := xhandler.HandlerFuncC(simple) accountHandler := xhandler.HandlerFuncC(account) noteHandler := xhandler.HandlerFuncC(note) mux := bone.New() mux.Get("/account/:id", c.Handler(accountHandler)) mux.Get("/note/:id", c.Handler(noteHandler)) mux.Get("/simple", c.Handler(simpleHandler)) http.ListenAndServe(":8080", mux) }