如何通过定价计划限制快递 API 请求
How to limit express API request by pricing plan
我正在构建具有定价计划的 public API。
我想限制对每个帐户及其计划的 API 请求。
我使用 NodeJS 和 ExpressJS
这些代码不能 运行 正确,我不能在 return 数据之后进行 next()。如何解决这个中间件?
const rateLimit = require("express-rate-limit");
const freePlan = rateLimit({
windowMs: 1 * 60 * 1000,
max: 5,
message: {
error: "Try again after 1 minute"
}
})
const premiumPlan = rateLimit({
windowMs: 1 * 60 * 1000,
max: 30,
message: {
error: "Try again after 1 minute"
}
})
function limiter(req, res, next ) {
switch (req.body.plan) {
case "free":
return freePlan
break;
case "big":
return premiumPlan
break;
default:
break;
}
next();
}
module.exports = limiter;
const express = require('express');
const limiter = require("../middlewares/limiter");
const router = express.Router();
router.get('/', limiter, async (req, res) => {
res.send('OK');
})
module.exports = router;
这是我从 github 找到的答案并在这里分享..
const rateLimit = require("express-rate-limit");
function isPremium(req) {
//... your logic to return true false based on premium plan or not
}
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
// see https://github.com/nfriedly/express-rate-limit#max
max: function(req, res) {
if (isPremium(req)) {
return 30;
}
return 5;
}
});
// apply to all requests
app.use(limiter);
我正在构建具有定价计划的 public API。 我想限制对每个帐户及其计划的 API 请求。 我使用 NodeJS 和 ExpressJS
这些代码不能 运行 正确,我不能在 return 数据之后进行 next()。如何解决这个中间件?
const rateLimit = require("express-rate-limit");
const freePlan = rateLimit({
windowMs: 1 * 60 * 1000,
max: 5,
message: {
error: "Try again after 1 minute"
}
})
const premiumPlan = rateLimit({
windowMs: 1 * 60 * 1000,
max: 30,
message: {
error: "Try again after 1 minute"
}
})
function limiter(req, res, next ) {
switch (req.body.plan) {
case "free":
return freePlan
break;
case "big":
return premiumPlan
break;
default:
break;
}
next();
}
module.exports = limiter;
const express = require('express');
const limiter = require("../middlewares/limiter");
const router = express.Router();
router.get('/', limiter, async (req, res) => {
res.send('OK');
})
module.exports = router;
这是我从 github 找到的答案并在这里分享..
const rateLimit = require("express-rate-limit");
function isPremium(req) {
//... your logic to return true false based on premium plan or not
}
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
// see https://github.com/nfriedly/express-rate-limit#max
max: function(req, res) {
if (isPremium(req)) {
return 30;
}
return 5;
}
});
// apply to all requests
app.use(limiter);