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
我尝试动态传递参数,但是当超出限制时,但它没有给出超出限制的响应。
这里有两个问题:
express-rate-limit 目前不支持动态窗口大小。
windowMs
必须是对所有请求都相同的单个数字。
必须在处理任何请求之前创建
rateLimit
实例。您的代码将为每个请求创建一个新实例。
此外,还有三分之一相关问题,
max
字段可以是动态的,但它应该是一个函数,类似于您的keyGenerator
才能正常工作。