Skip to content

Commit

Permalink
Add chi router example
Browse files Browse the repository at this point in the history
  • Loading branch information
pyjac committed Sep 7, 2018
1 parent af07f87 commit bba7c96
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ See middleware examples:

* [HTTP](https://github.com/ulule/limiter/tree/master/examples/http/main.go)
* [Gin](https://github.com/ulule/limiter/tree/master/examples/gin/main.go)
* [Beego](https://github.com/ulule/limiter/blob/master/examples/beego/main.go)
* [Chi](https://github.com/ulule/limiter/tree/master/examples/chi/main.go)

## How it works

Expand Down
56 changes: 56 additions & 0 deletions examples/chi/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package main

import (
"fmt"
"log"
"net/http"

"github.com/go-chi/chi"
redis "github.com/go-redis/redis"
"github.com/ulule/limiter"
"github.com/ulule/limiter/drivers/middleware/stdlib"
sredis "github.com/ulule/limiter/drivers/store/redis"
)

func main() {

// Define a limit rate to 4 requests per hour.
rate, err := limiter.NewRateFromFormatted("4-H")
if err != nil {
log.Fatal(err)
return
}

// Create a redis client.
option, err := redis.ParseURL("redis://localhost:6379/0")
if err != nil {
log.Fatal(err)
return
}
client := redis.NewClient(option)

// Create a store with the redis client.
store, err := sredis.NewStoreWithOptions(client, limiter.StoreOptions{
Prefix: "limiter_chi_example",
MaxRetry: 3,
})
if err != nil {
log.Fatal(err)
return
}

// Create a new middleware with the limiter instance.
middleware := stdlib.NewMiddleware(limiter.New(store, rate), stdlib.WithForwardHeader(true))

// Launch a simple chi server.
router := chi.NewRouter()
router.Use(middleware.Handler)
router.Get("/", index)
fmt.Println("Server is running on port 7777...")
log.Fatal(http.ListenAndServe(":7777", router))
}

func index(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Write([]byte(`{"message": "ok"}`))
}

0 comments on commit bba7c96

Please sign in to comment.