- Frontend: Next.js
- Backend - NodeJS, ExpressJS, Redis
This app has been build using exoress-rate-limit
and rate-limit-redis
library which will block connections from a client after surpassing certain amount of requests (default: 10) per time (default: 10 sec)
The application will return after each request the following headers. That will let the user know how many requests they have remaining before the run over the limit.
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 9
On the 10th run server should return an HTTP status code of 429 Too Many Requests
"PEXPIRE", "MULTI", "DEL", "PTTL", "EXEC", "DECR", "INCR"
- Node - v12.19.0
- NPM - v6.14.8
- Docker - v19.03.13 (optional)
git clone https://github.com/redis-developer/basic-redis-rate-limiting-demo-nodejs/
# copy file and set proper data inside
cp .env.example .env
# install dependencies
npm install
# run docker compose or install redis manually
docker network create global
docker-compose up -d --build
npm run dev
- PORT - port that server is listening on.
- REDIS_HOST - host for redis instance. Can be with
redis://
or without. - REDIS_PORT - port for redis instance.
- REDIS_PASSWORD - password for redis. Running redis by docker-compose, there's no password. Running by https://redislabs.com/try-free/ you have to pass this variable.
- REDIS_ENDPOINT_URI - redis port and host encoded in redis uri take precedence over other environment variables. Can be with
redis://
or without. - COMPOSE_PROJECT_NAME - only for docker-compose to set project name.
To make deploys work, you need to create free account in https://redislabs.com/try-free/ and get Redis' instance informations - REDIS_ENDPOINT_URI and REDIS_PASSWORD. You must pass them as environmental variables (in .env file or by server config, like Heroku Config Variables
).