node-traffic-shield
Version:
Versatile rate-limiting middleware for Node.js, compatible with both Express.js and NestJS, designed to safeguard applications from excessive traffic.
107 lines (73 loc) • 3.33 kB
Markdown
# NodeRateGuard
node-traffic-shield is a simple, memory-based rate limiting middleware for Node.js applications. It's designed to protect your Node.js and Express.js applications from excessive and potentially harmful traffic by limiting the number of requests a client can make in a given time frame.
## Features
- Easy to integrate with Express.js applications.
- Memory-based rate limiting, no external dependencies required.
- Configurable rate limits and time windows.
- Helps protect against brute-force attacks, DDoS attacks, and other forms of excessive request rates.
## Installation
Install NodeRateGuard via npm:
```npm install node-traffic-shield```
## Usage
To use NodeRateGuard, import it into your Express.js application and apply it as middleware. You can apply it globally or to specific routes.
### Basic Usage
Here's how to set up node-traffic-shield with default settings for a simple Express.js application:
```javascript
const express = require('express');
const rateLimiter = require('node-traffic-shield');
const app = express();
// Apply the rate limiter middleware
app.use(rateLimiter({
limit: 100, // Maximum number of requests per IP within the windowMs period
windowMs: 15 * 60 * 1000 // Time window in milliseconds (here, 15 minutes)
}));
app.get('/', (req, res) => {
res.send('Hello, World!');
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
```
### NestJS
In NestJS, wrap the middleware in a class that implements `NestMiddleware`.
**Create a Middleware Wrapper**
```typescript
// rateLimiter.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
const rateLimiter = require('node-traffic-shield');
@Injectable()
export class RateLimiterMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
return rateLimiter({ limit: 100, windowMs: 15 * 60 * 1000 })(req, res, next);
}
}
```
**Apply Middleware in a NestJS Module**
In your NestJS module (e.g., `app.module.ts`), apply the middleware using the `configure` method of the module class. Here's an example:
```typescript
// app.module.ts
import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { RateLimiterMiddleware } from './rateLimiter.middleware';
@Module({
// ... other module settings
})
export class AppModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(RateLimiterMiddleware)
.forRoutes({ path: '*', method: RequestMethod.ALL });
}
}
```
### Configuration Options
- `limit`: The maximum number of requests allowed per IP within the `windowMs` timeframe. Default is 100.
- `windowMs`: The time frame for checking the request count in milliseconds. Default is 900000 ms (15 minutes).
## Contributing
Contributions, issues, and feature requests are welcome! Feel free to check [issues page](https://github.com/BekzodbekTurgunov/node-traffic-shield/issues).
## Support
If you have any questions or issues, please open an issue on the GitHub repository.
## License
This project is licensed under the MIT License - see the [LICENSE](https://github.com/BekzodbekTurgunov/node-traffic-shield) file for details.
# node-traffic-shield