express-api-limiter
Version:
express-api-rate-limit is a simple and customizable rate-limiting middleware for Express.js applications, designed to prevent abuse by restricting the number of requests a client can make within a specified time window. This package allows you to define d
78 lines (55 loc) • 2.54 kB
Markdown
`express-api-limiter` is a simple, lightweight, and flexible rate-limiting middleware for Express.js applications. It allows you to define custom rate limits for individual API routes, ensuring that clients can only make a specified number of requests within a given time window. This helps to prevent API abuse and overloads while maintaining a smooth user experience.
- Custom rate-limiting for each route with flexible configurations.
- Set a time window (e.g., 1 minute, 1 hour) and maximum requests (e.g., 100 requests).
- Easy integration with Express.js.
- Memory-based rate-limiting solution with client IP address tracking.
- Provides customizable error responses when rate limits are exceeded.
## Installation
To install the package, run the following command in your project:
```bash
npm install express-api-limiter
```
## Usage
### 1. **Import the RateLimiter**
```typescript
import { RateLimiter } from 'express-api-limiter';
```
```typescript
const rateLimiter = new RateLimiter();
```
You can apply the rate limiter directly to a specific route using `rateLimiter.middleware` with custom rate limit parameters:
```typescript
import express from 'express';
import { RateLimiter } from 'express-api-limiter';
const app = express();
const rateLimiter = new RateLimiter();
// Example: Apply rate-limiting middleware directly to a specific route
app.get('/api/endpoint', rateLimiter.middleware({ windowMs: 1, maxCalls: 100 }), (req, res) => {
res.send('This is a rate-limited API endpoint!');
});
// Example: Another route with different rate limit
app.get('/api/another-endpoint', rateLimiter.middleware({ windowMs: 5, maxCalls: 50 }), (req, res) => {
res.send('This is another rate-limited API endpoint with a different limit.');
});
// Start the server
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
```
- **`windowMs`**: The time window in minutes for the rate limit (e.g., `1` for 1 minute).
- **`maxCalls`**: The maximum number of requests allowed within the `windowMs` period.
### 4. **Handling Exceeding Rate Limit**
If a client exceeds the allowed rate limit, they will receive a response with status code `429` and a message like:
```json
{
"message": "Too many requests. Please try again after 1 minute."
}
```
This package is open-source and available under the [MIT License](LICENSE).
---