@ajay9299/rate-limiter
v1.0.1
Published
Lightweight API rate limiter middleware for Node.js and Express
Maintainers
Readme
🚀 @ajay9299/rate-limiter
A simple and flexible Token Bucket based Rate Limiter middleware for Express.js.
📦 Installation
npm install @ajay9299/rate-limiter⚡ Quick Start
import express from 'express';
import { RateLimiter } from '@ajay9299/rate-limiter';
const app = express();
const limiter = new RateLimiter();
app.use(
limiter.middleware(
(req) => req.ip, // keyGenerator
() => 5, // capacity (max tokens)
() => 1 // refill rate (tokens per second)
)
);
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});⚙️ Configuration
middleware parameters:
| Parameter | Type | Description |
| ------------ | ----------------- | ----------------------- |
| keyGenerator | (req) => string | Unique key per user/IP |
| capacity | (req) => number | Max tokens in bucket |
| refillRate | (req) => number | Tokens added per second |
🧠 How it works
- Each request consumes 1 token
- Tokens refill over time
- If no tokens → request is rejected (429)
📌 Per Route Rate Limiting
app.use(
'/user',
limiter.middleware(
(req) => `${req.ip}:user`,
() => 10,
() => 2
)
);
app.use(
'/post',
limiter.middleware(
(req) => `${req.ip}:post`,
() => 5,
() => 1
)
);🔥 Advanced Key Example
(req) => `${req.ip}:${req.baseUrl}:${req.method}`🚧 Future Enhancements
- Redis support (distributed rate limiting)
- Sliding window algorithm
- Rate limit headers
- Auto cleanup of buckets
📄 License
ISC
