Node.js 速率限制器灵活+;计划每个用户的使用率

Node.js 速率限制器灵活+;计划每个用户的使用率,node.js,Node.js,我玩这个软件包,但我不能做我想做的事 我解释说,我希望每个用户都有一个计数器,当该计数器到达时,如果用户支付新软件包api调用,则用户被阻止,并且用户可以重置该计数器 此时,当用户到达最大点时,我可以阻止他: const opts = { storeClient: redisClient, points: 10, // 100 points //duration: 15*60, // Per 15 minutes duration: 0, }; const rateLimite

我玩这个软件包,但我不能做我想做的事

我解释说,我希望每个用户都有一个
计数器
,当该计数器到达时,如果用户支付
新软件包api
调用,则用户被阻止,并且
用户
可以重置该计数器

此时,当用户到达
最大点时,我可以
阻止他:

const opts = {
  storeClient: redisClient,
  points: 10, // 100 points
  //duration: 15*60, // Per 15 minutes
  duration: 0,
};

const rateLimiterRedis = new RateLimiterRedis(opts);

const rateLimiterMiddleware = (req, res, next) => {
  const isIpLimited = req.ip;
  if (isIpLimited) {
    // Consume 1 point for each request
    rateLimiterRedis.consume(req.ip, 1)
      .then((rateLimiterRes) => {
        console.log(rateLimiterRes)
        // There was enough remaining points
            
      })
      .catch((rejRes) => {
        // All points consumed
        const secs = Math.round(rejRes.msBeforeNext / 1000) || 1;
        res.set('Retry-After', String(secs));
        res.status(429).send('Too Many Requests');
      });
  } else {
    next();
  }
};

app.use(rateLimiterMiddleware);
也许我可以尝试使用。设置方法。。。有什么想法吗

非常感谢

我知道两种选择:

  • 创建一个100000000点的限速器。消费取决于使用计划:freemium每次请求消耗10000000点,silver plan每次请求消耗1000000点,gold plan每次请求消耗1000点,等等。购买新计划时,删除以前通过IP消耗的点
  • 为每个计分不同的计划创建单独的费率限制。根据用户的计划,从适当的限速器消费