feat: enable rate limit on API server (#15)

This commit is contained in:
Takeshi Kimata
2024-07-20 08:40:45 +09:00
committed by GitHub
parent a1ad775a7a
commit e0fa63db0f
3 changed files with 31 additions and 0 deletions

View File

@@ -1,4 +1,5 @@
const express = require('express'); const express = require('express');
const RateLimit = require('express-rate-limit');
const path = require('path'); const path = require('path');
const { Sequelize } = require('sequelize'); const { Sequelize } = require('sequelize');
const app = express(); const app = express();
@@ -15,6 +16,14 @@ app.use(cors(corsOptions));
// enable json middleware // enable json middleware
app.use(express.json()); app.use(express.json());
// enable rate limiter
const limiter = RateLimit({
windowMs: 60 * 60 * 1000, // 1h
max: 1000, // 1000 requests per hour
message: 'Too many requests from this IP, please try again after an hour',
});
app.use(limiter);
// Specify the directory to serve static files // Specify the directory to serve static files
app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public')));

View File

@@ -12,6 +12,7 @@
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
"express-rate-limit": "^7.3.1",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"sequelize": "^6.36.0", "sequelize": "^6.36.0",
@@ -1132,6 +1133,20 @@
"node": ">= 0.10.0" "node": ">= 0.10.0"
} }
}, },
"node_modules/express-rate-limit": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.3.1.tgz",
"integrity": "sha512-BbaryvkY4wEgDqLgD18/NSy2lDO2jTuT9Y8c1Mpx0X63Yz0sYd5zN6KPe7UvpuSVvV33T6RaE1o1IVZQjHMYgw==",
"engines": {
"node": ">= 16"
},
"funding": {
"url": "https://github.com/sponsors/express-rate-limit"
},
"peerDependencies": {
"express": "4 || 5 || ^5.0.0-beta.1"
}
},
"node_modules/ext": { "node_modules/ext": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
@@ -4292,6 +4307,12 @@
"vary": "~1.1.2" "vary": "~1.1.2"
} }
}, },
"express-rate-limit": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.3.1.tgz",
"integrity": "sha512-BbaryvkY4wEgDqLgD18/NSy2lDO2jTuT9Y8c1Mpx0X63Yz0sYd5zN6KPe7UvpuSVvV33T6RaE1o1IVZQjHMYgw==",
"requires": {}
},
"ext": { "ext": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",

View File

@@ -14,6 +14,7 @@
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^4.18.2", "express": "^4.18.2",
"express-rate-limit": "^7.3.1",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"sequelize": "^6.36.0", "sequelize": "^6.36.0",