Skip to content

Commit 5d160bb

Browse files
committed
Implement rate-limiter
1 parent 532ea36 commit 5d160bb

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"date-fns": "^3.6.0",
5858
"dotenv": "^16.4.5",
5959
"express": "4.19.2",
60+
"express-rate-limiter": "^1.3.1",
6061
"helmet": "^7.1.0",
6162
"http-status-codes": "^2.3.0",
6263
"joi": "^17.12.2",
@@ -74,6 +75,7 @@
7475
"@types/bcrypt": "^5.0.2",
7576
"@types/cors": "^2.8.17",
7677
"@types/express": "^4.17.21",
78+
"@types/express-rate-limit": "^6.0.0",
7779
"@types/jest": "^29.5.12",
7880
"@types/jsonwebtoken": "^9.0.6",
7981
"@types/node": "^20.11.30",

src/app.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import helmet from 'helmet';
55
import { bindModel } from './config/db';
66
import genericErrorHandler from './middlewares/genericErrorHandler';
77
import notFoundHandler from './middlewares/notFoundHandler';
8+
import rateLimitMiddleware from './middlewares/rateLimitHandler';
89
import transactionHandler from './middlewares/transactionHandler';
910
import routes from './routes';
1011

@@ -15,6 +16,7 @@ bindModel();
1516
app.use(cors());
1617
app.use(helmet());
1718
app.use(transactionHandler);
19+
app.use(rateLimitMiddleware);
1820
app.use(express.json({ limit: '300kb' }));
1921
app.use(express.urlencoded({ extended: true }));
2022

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { rateLimit } from 'express-rate-limit';
2+
3+
// write express rateLimit best practices
4+
const rateLimitMiddleware = rateLimit({
5+
windowMs: 15 * 60 * 1000, // 15 minutes
6+
max: 100, // limit each IP to 100 requests per windowMs
7+
message: 'Too many requests from this IP, please try again after 15 minutes',
8+
headers: true
9+
});
10+
11+
export default rateLimitMiddleware;

yarn.lock

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,13 @@
850850
dependencies:
851851
"@types/node" "*"
852852

853+
"@types/express-rate-limit@^6.0.0":
854+
version "6.0.0"
855+
resolved "https://registry.yarnpkg.com/@types/express-rate-limit/-/express-rate-limit-6.0.0.tgz#11a314477895a8a888958f27650ed0d1ddad01b0"
856+
integrity sha512-nZxo3nwU20EkTl/f2eGdndQkDIJYwkXIX4S3Vrp2jMdSdFJ6AWtIda8gOz0wiMuOFoeH/UUlCAiacz3x3eWNFA==
857+
dependencies:
858+
express-rate-limit "*"
859+
853860
"@types/express-serve-static-core@^4.17.33":
854861
version "4.17.43"
855862
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54"
@@ -2391,6 +2398,16 @@ expect@^29.0.0, expect@^29.7.0:
23912398
jest-message-util "^29.7.0"
23922399
jest-util "^29.7.0"
23932400

2401+
express-rate-limit@*:
2402+
version "7.2.0"
2403+
resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.2.0.tgz#06ce387dd5388f429cab8263c514fc07bf90a445"
2404+
integrity sha512-T7nul1t4TNyfZMJ7pKRKkdeVJWa2CqB8NA1P8BwYaoDI5QSBZARv5oMS43J7b7I5P+4asjVXjb7ONuwDKucahg==
2405+
2406+
express-rate-limiter@^1.3.1:
2407+
version "1.3.1"
2408+
resolved "https://registry.yarnpkg.com/express-rate-limiter/-/express-rate-limiter-1.3.1.tgz#4c3444e796969d971817abdbb6a3b8a86fcda9b4"
2409+
integrity sha512-qLRc4ZkyCcfUCjPtVjwQOtf4OYPc7hc6ObOFemeeVYLlbam541/B7R33VvhztFsBGRUIT/wJW/oJz8n5k+fRfw==
2410+
23942411
express@4.19.2:
23952412
version "4.19.2"
23962413
resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"

0 commit comments

Comments
 (0)