Rate limiting is a technique used to control the rate at which a user or client can make requests to a server. This is often done to prevent abuse, protect against denial-of-service attacks, and ensure fair usage of resources. In a Node.js application, you can implement rate limiting using various approaches. One common method is to use a middleware to check and limit the rate of incoming requests. Here's a simple example using the express-rate-limit
middleware, which is a popular choice for Express.js applications:
express-rate-limit
package:bashnpm install express-rate-limit
javascriptconst express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// Define a rate limiter with options
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // limit each IP to 100 requests per windowMs
message: 'Too many requests from this IP, please try again later.',
});
// Apply the rate limiter to all routes
app.use(limiter);
// Your routes go here
app.get('/', (req, res) => {
res.send('Hello, World!');
});
// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
In the above example:
windowMs
: The time window for which the limit is applied (15 minutes in this case).max
: The maximum number of requests allowed from a single IP address during the specified windowMs.message
: The message to be sent in the response when the limit is exceeded.You can customize these options based on your specific requirements.
Note: This example uses a fixed window approach (windowMs
), but you can explore other options like sliding window if you need more flexibility.
Keep in mind that rate limiting should be used judiciously and adjusted based on your application's requirements. It's important to find the right balance between preventing abuse and ensuring a good user experience.