Node.js 我可以为同一条线路设置多个速度限制吗?
我是否可以为我的express server设置全局Node.js 我可以为同一条线路设置多个速度限制吗?,node.js,express,express-rate-limit,Node.js,Express,Express Rate Limit,我是否可以为我的express server设置全局费率限制,并为某些路线设置更严格的费率限制 例如: const globalLimit = rateLimit({ windowMs: 60 * 60 * 1000, // 1 HOUR max: 500 // MAX 500 REQUESTS }); const apiLimit = rateLimit({ windowMs: 60 * 60 * 1000,
费率限制
,并为某些路线设置更严格的费率限制
例如:
const globalLimit = rateLimit({
windowMs: 60 * 60 * 1000, // 1 HOUR
max: 500 // MAX 500 REQUESTS
});
const apiLimit = rateLimit({
windowMs: 60 * 60 * 1000, // 1 HOUR
max: 100 // MAX 100 REQUESTS
});
const someRouteLimit = rateLimit({
windowMs: 60 * 60 * 1000, // 1 HOUR
max: 10 // MAX 10 REQUESTS
});
app.use("/", globalLimit); // ALL ROUTES WILL BE LIMITED BY THE globalLimit
app.use("/api", apiLimit); // API ROUTES WILL BE LIMITED BY THE apiLimit
app.get("/some-route", someRouteLimit, routeHandler); // THIS ROUTE WILL BE LIMITED BY THE someRouteLimit
它会按照我的意愿工作吗?这是正常使用的
快速费率限制
套餐还是反模式?快速费率限制
套餐颇受欢迎。所以我不认为这是一种反模式
中间件可以链接
例如,您希望在/some route
上同时施加someRouteLimit
和apiLimit
app.get(“/some route”,apiLimit,sometroutelimit,routeHandler)
中间件是按顺序执行的,因此您希望将更严格的中间件放在更宽松的中间件之后
快速中间件层次结构:
app.use(“/”,globalLimit)
是一个应用级中间件,因此它将首先在所有其他中间件之前执行,但在其他应用级中间件之前/之后执行,具体取决于调用它们的顺序
您还可以使用路由器对路由进行分组,并在特定路由器上应用速率限制中间件
在您的app.js
或index.js
中:
//依赖关系
const express=require('express')
const rateLimit=require('express-rate-limit')
//初始化应用程序
const app=express()
const globalLimit=速率限制({
windowMs:60*60*1000,//1小时
最多:500//最多500个请求
});
const apiLimit=费率限制({
windowMs:60*60*1000,//1小时
最多:100//最多100个请求
});
//装货路线
const routeOne=需要('./路由/routeOne');
const routeTwo=要求('./路由/路由);
//使用路线
应用程序使用(“/”,routeOne,apiLimit);//对这个路由器施加限制
应用程序使用(“/”,routeTwo);//没有应用路由器级中间件
app.listen(端口号)
在routeOne中:(受globalLimit
和APLimit
限制)
const express=require('express');
const router=express.router();
const rateLimit=require('express-rate-limit')
const someRouteLimit=费率限制({
windowMs:60*60*1000,//1小时
最多:10//最多10个请求
});
//某些路线(进一步受到someRouteLimit的限制)
router.post('/some route',some routelimit,routeHandler);
module.exports=路由器;
在路由器中:(受globalLimit
限制,但不受apiLimit
限制)
const express=require('express');
const router=express.router();
const rateLimit=require('express-rate-limit')
const someRouteLimit2=费率限制({
windowMs:60*60*1000,//1小时
最多:10//最多10个请求
});
//某些路线(进一步受到someRouteLimit2的限制)
router.post('/some-route2',someRouteLimit,routeHandler);
module.exports=路由器;
如果您想以更定制的方式实现中间件,那么在中有一些更具创造性的方法使用regex和customhelper函数