首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过定价方案限制快速API请求

如何通过定价方案限制快速API请求
EN

Stack Overflow用户
提问于 2021-08-16 02:35:58
回答 1查看 49关注 0票数 0

我正在建立一个具有定价计划的公共API。我希望将API请求限制到每个帐户及其计划。我使用NodeJS和ExpressJS

这些代码无法正常运行,我无法在返回数据后执行next()。如何解决这个中间件?

代码语言:javascript
复制
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;

代码语言:javascript
复制
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;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-16 06:07:31

这是我从github找到的答案,并在这里分享..

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68796853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档