如何使用express-rate-limit在rateLimit中动态添加windowMS和最大值

问题描述 投票:0回答:1
const rateLimit = require('express-rate-limit')

const limitMiddleware = (req = {}, res = {}, next) => {
    console.log(req.body.timeLimit, req.body.messageLimit, req.query.userId)

    return rateLimit({
        windowMs: req.body.timeLimit,
        max: req.body.messageLimit,
        keyGenerator: function (req) {
           console.log('req.query.userId', req.query.userId)
           return req.query.userId
        },
        handler: function (req, res, next) {
           res.status(429).json({
              message: 'You have exceeded your request limit.'
           })
        },
        headers: true
    })
}

module.exports = limitMiddleware

我尝试动态传递参数,但是当超出限制时,但它没有给出超出限制的响应。

node.js express middleware rate-limiting express-rate-limit
1个回答
0
投票

这里有两个问题:

  1. express-rate-limit 目前不支持动态窗口大小。

    windowMs
    必须是对所有请求都相同的单个数字。

  2. 必须在处理任何请求之前创建

    rateLimit
    实例。您的代码将为每个请求创建一个新实例。

此外,还有三分之一相关问题,

max
字段可以是动态的,但它应该是一个函数,类似于您的
keyGenerator
才能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.