func main() { r := chi.NewRouter() r.Use(middleware.Logger) r.Use(httpcoala.Route("HEAD", "GET")) // or, Route("*") r.Get("/", func(w http.ResponseWriter, r *http.Request) { time.Sleep(100 * time.Millisecond) // expensive op w.WriteHeader(200) w.Write([]byte("hi")) }) http.ListenAndServe(":1111", r) }
func main() { controllers.Asset = Asset controllers.GitHubClient = initGitHubClient() top := controllers.TopController{} ranking := controllers.RankingController{} goji.Get("/assets/*", http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "/"})) goji.Get("/frontend/*", http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "/"})) goji.Get("/api/ranking/:username", ranking.ShowAPI) goji.Get("/", top.Index) goji.Use(httpcoala.Route("*")) goji.Serve() }
func main() { var err error yosage.LGTM, err = Asset("lgtm.png") if err != nil { log.Fatalln(err) } controllers.Asset = Asset top := controllers.TopController{} lgtm := controllers.LgtmController{} goji.Get("/assets/*", http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "/"})) goji.Get("/frontend/*", http.FileServer(&assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: "/"})) goji.Post("/api/lgtm", lgtm.CreateAPI) goji.Get("/", top.Index) goji.Use(httpcoala.Route("*")) goji.Serve() }
func (srv *Server) NewRouter() http.Handler { cf := srv.Config conrd, err := consistentrd.New(cf.Cluster.LocalNode, cf.Cluster.Nodes) if err != nil { panic(err) } r := chi.NewRouter() r.Use(ParentContext(srv.Ctx)) r.Use(middleware.RequestID) r.Use(middleware.RealIP) r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.ThrottleBacklog(cf.Limits.MaxRequests, cf.Limits.BacklogSize, cf.Limits.BacklogTimeout)) r.Use(middleware.CloseNotify) r.Use(middleware.Timeout(cf.Limits.RequestTimeout)) r.Use(httpcoala.Route("HEAD", "GET")) r.Use(heartbeat.Route("/ping")) r.Use(heartbeat.Route("/favicon.ico")) if cf.Airbrake.ApiKey != "" { r.Use(AirbrakeRecoverer(cf.Airbrake.ApiKey)) } if srv.Config.Profiler { r.Mount("/debug", middleware.NoCache, Profiler()) } r.Get("/", trackRoute("root"), func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) w.Write([]byte(".")) }) r.Get("/info", trackRoute("imageInfo"), GetImageInfo) r.Route("/:bucket", func(r chi.Router) { r.Post("/", BucketImageUpload) r.Group(func(r chi.Router) { cors := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, AllowedMethods: []string{"GET", "OPTIONS"}, AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"}, ExposedHeaders: []string{"Link"}, AllowCredentials: true, MaxAge: 300, // Maximum value not ignored by any of major browsers }) r.Use(cors.Handler) r.Get("/", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketGetIndex) r.Get("/fetch", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketFetchItem) }) // TODO: review r.Get("/add", trackRoute("bucketAddItems"), BucketAddItems) r.Get("/:key", conrd.Route(), BucketGetItem) r.Delete("/:key", conrd.Route(), BucketDeleteItem) }) // DEPRECATED r.Get("/fetch", trackRoute("bucketV0GetItem"), BucketV0FetchItem) // for Pressilla v2 apps r.Get("/:bucket//fetch", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketFetchItem) // -- return r }