node.js - 速率限制 GET 请求

标签 node.js mongodb

我有一个外部 API,可将 API 请求速率限制为每秒最多 25 个请求。我想将部分结果插入 MongoDB 数据库。

我如何限制请求函数的速率,这样我就不会错过所有数组的任何 API 结果?

MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) {
    if (err) {
        throw err;
    } else {
        for (var i = 0; i < arr.length; i++) {
            //need to rate limit the following function, without missing any value in the arr array
            request( {
                method: 'GET',
                url: 'https://SOME_API/json?address='+arr[i]
            },
            function (error, response, body) {
                //doing computation, including inserting to mongo
            }
            )
        };
    }
});

最佳答案

这可以使用 request-rate-limiter 包来完成。所以你可以将它添加到你的代码中:

var RateLimiter = require('request-rate-limiter');
const REQS_PER_MIN = 25 * 60; // that's 25 per second
var limiter = new RateLimiter(REQS_PER_MIN);

并且因为 request-rate-limiter 是基于 request 的,你可以用 limiter.request 替换 request >

您可以在软件包的 npm 页面上找到更多信息 - https://www.npmjs.com/package/request-rate-limiter

就个人而言 - 我会用 promises 替换所有这些回调

关于node.js - 速率限制 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24783542/

相关文章:

jquery - 如何在Electron上使用jQuery?

javascript - 在 Mongoose 中使用 Virtual 来返回查询的全名

windows - 如何在 Windows 中使用某些预定义端口从 cmd 运行 node.js 应用程序

python - mongoengine - 运行时错误 : generator raised StopIteration

node.js - Mongodb 查询过滤文档中对象的嵌套数组

node.js - AWS lambda 与 mongoose 到 Atlas - MongoNetworkError

node.js - 在 firebase 中看不到请求 header 的值?

javascript - 查找数组包含多于 X 条记录的记录?

node.js - "pre"和 "post"删除中间件未触发

json - 错误 : Cannot read config file: X:\package. json