429运行Mocha测试时出现请求过多错误- NodeJS / Swagger API

bkhjykvo  于 2023-03-17  发布在  Node.js
关注(0)|答案(1)|浏览(177)

我使用swagger(swagger.io)构建应用的API,在生产环境中一切正常。但是,当我对这些API运行一些摩卡测试时,我不断收到此错误,状态代码为429太多请求:

Unhandled rejection Error: Too Many Requests
    at Request.callback (..../node_modules/superagent/lib/node/index.js:698:17)
    at IncomingMessage.<anonymous> (..../node_modules/superagent/lib/node/index.js:922:12)
    at emitNone (events.js:91:20)
    at IncomingMessage.emit (events.js:185:7)
    at endReadableNT (_stream_readable.js:926:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)

通常这个错误发生在我连续运行两次摩卡测试之后(即从第三次开始抛出这个错误).我怀疑我的localhost服务器超载了,但是即使我关闭并重新打开服务器,错误仍然存在.
如果有人能给我指出解决这个问题的正确方向,我将超级感激。

9jyewag0

9jyewag01#

我猜您使用的express-rate-limit带有一些环境变量,这些变量在测试过程中可能会丢失。在这种情况下,rateLimiter将尝试使用默认值(根据它们的documentation

  • 窗口长度:60000(1分钟)
  • 最多:5(请求))

因此,当您看到错误消息时,它将显示类似**超出请求速度(5个最大请求中有6个)**的内容
所以你可以做的是设置你的默认值,以防你的变量是未定义的。或者你可以在你的测试文件中设置它们。对于第一种方法,你可以像下面这样:

const rateLimit = require("express-rate-limit")
const rateLimiter = rateLimit({
    windowMs: process.env.REQUEST_VELOCITY_WINDOW || 60000,
    max: process.env.REQUEST_VELOCITY_LIMIT || 1000,
    handler: (req, res) => {
        console.error(
            `Request velocity exceeded (${req.rateLimit.current} out of ${req.rateLimit.limit} max requests) ${req.ip} - ${req.url}`
        )
        res.status(429).send("Request velocity exceeded")
    },
})

相关问题