Node.js6 min read
Rate Limiting
Protect your API with rate limiting. Prevent abuse and DDoS attacks.
Sarah Chen
December 19, 2025
0.0k0
Rate Limiting
Why Rate Limiting?
Without rate limiting:
- Users can spam your API
- DDoS attacks can crash your server
- Costs increase from excessive requests
- Database gets overloaded
Setup
npm install express-rate-limit
Basic Rate Limiting
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100,
message: 'Too many requests, please try again later',
standardHeaders: true,
legacyHeaders: false
});
app.use(limiter);
Explanation:
windowMs: Time window (15 minutes)max: Max requests per window (100)- User can make 100 requests in 15 minutes
Different Limits for Different Routes
const authLimiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 5,
message: 'Too many login attempts'
});
app.post('/login', authLimiter, async (req, res) => {
});
const readLimiter = rateLimit({
windowMs: 60 * 1000,
max: 100
});
app.get('/api/products', readLimiter, async (req, res) => {
});
Redis Store for Multiple Servers
const RedisStore = require('rate-limit-redis');
const { createClient } = require('redis');
const redisClient = createClient();
redisClient.connect();
const limiter = rateLimit({
store: new RedisStore({
client: redisClient,
prefix: 'rl:'
}),
windowMs: 15 * 60 * 1000,
max: 100
});
app.use(limiter);
Key Takeaway
Always use rate limiting in production. Different limits for different routes. Use Redis store for multiple servers. Stricter limits for auth endpoints.
#Node.js#Rate Limiting#Security#API