有没有办法对 Express Nodejs 中的每个 api 密钥使用不同的速率限制?
例如,api 密钥“guest”的速率限制为每天 500 个请求,api 密钥“key”的速率限制为每天 1000 个请求。
简单的解决方案是使用一个名为 express-rate-limit 的 npm 包,这是一个流行的包,强烈推荐使用它。
如果该包不适合您,可以使用redis来实现,redis是一个内存数据库,因此您可以创建具有滑动时间的记录。当请求进来时,您可以更新或创建记录,如果达到限制,则阻止该请求,该逻辑可以在中间件中实现。
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// Define rate limit middleware for API1
const api1Limiter = rateLimit({
max: 50, // Maximum requests
windowMs: 60 * 60 * 1000, // 1 hour window
message: 'Too many requests from this IP for API1, please try again in an hour!',
});
// Define rate limit middleware for API2
const api2Limiter = rateLimit({
max: 100, // Maximum requests
windowMs: 60 * 60 * 1000, // 1 hour window
message: 'Too many requests from this IP for API2, please try again in an hour!',
});
// Apply rate limit middleware to specific routes
app.use('/api/api1', api1Limiter);
app.use('/api/api2', api2Limiter);
// Your API routes go here...
// Start the server
app.listen(3000, () => {
console.log('Server is running on port 3000');
});`enter code here`