【发布时间】:2019-02-06 10:20:59
【问题描述】:
首先,我是新来的,所以请...温柔点...过去几个月我一直在自学 node.js,主要是希望从 FlightAware 中抓取大量数据网站 API。
我正在尝试从他们的网站请求飞机的航班列表,这是我目前所拥有的。
var aircraft = [array,of,aircraft,tail,numbers]
for (i=0; i < aircraft.length; i++) {
faGetFlight(aircraft[i],function doneLookup(data) {
dbUpdateFlight(collectionName, data)
})
}
此代码有效,但一旦列表中有超过 10 架飞机,它就会失败,因为在一分钟内发送了超过 10 个 API 请求。有什么简单/直接的方法可以稍微减慢速度。每次运行时,我想总共发送大约 50-60 个 API 请求,所以我需要间隔 5-6 分钟。 faGetFlight() 函数使用“请求”模块。我尝试了 request-rate-limit 模块而不是 request 模块,但我似乎无法让它工作。我认为授权不能与 request-rate-limiter 模块一起正常工作。收到有关匿名用户的错误。对于它的工作原理,它只适用于请求模块,但我遇到了速率限制问题。
这是我的 faGetFlight() 代码。
var RateLimiter = require('request-rate-limiter');
const REQS_PER_MIN = 10; // that's 25 per second
var limiter = new RateLimiter(REQS_PER_MIN);
//API Variables //
var apiUrl = 'url'
var apiEndpoint = 'endpoint'
var apiAuth = 'apikey'
var apiExtData = 0
var apiHowMany = 15 //Number of results to request.
var options = { method: 'GET',
url: apiUrl + apiEndpoint,
qs: { ident: acIdent
},
headers:
{
Authorization: apiAuth }
};
limiter.request(options, function doneDownload(error, response, body) {
if (error) throw new error(error);
callback(body)
});
}
抱歉,如果不清楚...这是我的第一篇文章!
【问题讨论】:
-
你的第一篇文章做得很好,欢迎来到 SO。您是否收到错误消息,如果有,在哪一行?
-
感谢您的信任投票 :) API 正在排除错误。我每分钟执行的请求太多。
-
你可以使用rate-limiter-flexible node.js 包。