javascript - 延迟 node.js HTTP 请求
问题描述
我创建了一个 Node.js 脚本,它从 CSV 文件中读取数据,然后向端点发出 axios POST 请求以在数据库中创建用户。我的问题是,在处理大量数据(CSV 中的 100 多个用户)时,我一次发送了如此多的请求,以至于我收到一个 429 状态代码,表明请求过多。有没有办法把这些隔开?
这是我的代码:
const csv = require('csv-parser');
const fs = require('fs');
const axios = require('axios');
let dataArray = [];
let API_KEY = 'example key'
fs.createReadStream('output.csv')
.pipe(csv())
.on('data', async (row) => {
try {
let hluser = JSON.stringify({"TenantCode":"","Items":[{"MemberDetails":{"LegacyContactKey": row.hl_uid,"MemberID":"","EmailAddress": row.email,"FirstName": row.first_name,"LastName": row.last_name,"CompanyName": row.Company,"Title": row.job_title,"Phone1":"","Phone1Type":"Phone","Phone2":"","Phone2Type":"Office","Address1":"","City": row.city,"State": row.state,"PostalCode":"","Country": row.country,"Bio":"","ProfileImageURL":"","FacebookURL":"","TwitterURL":"","LinkedInURL":"","WebsiteUrl":"","IsMember":"True","IsActive":"True"},"CommunityGroups":[{"GroupKey":"","RoleDescription":"Member"}]}]});
console.log(hluser);
let config = {
method: 'POST',
url: 'example.com/v1/api',
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
},
data: hluser
};
const {data} = await axios(config)
console.log(data);
console.log('***********************************');
console.log(`Successfully added ${row.first_name} ${row.last_name} to Higher Logic`);
console.log('***********************************');
console.log(row);
} catch (err) {
console.log(err);
console.log(`Could not add ${row.first_name} ${row.last_name}`);
}})
.on('end', () => {
console.log('CSV file successfully processed');
});
解决方案
有一个名为axios-rate-limit的不错的库,您可以使用它来限制您的请求。
因此,如果您想将请求限制为每秒 5 个请求,您可以简单地执行以下操作:
const http = rateLimit(axios.create(), { maxRequests: 5, perMilliseconds: 1000 });
fs.createReadStream('output.csv')
.pipe(csv())
.on('data', async (row) => {
// ...
const {data} = await http(config)
// ..
});
推荐阅读
- python - Python Plotly Funnel 中看不到数字
- reactjs - React Helmet TypeError:无法将符号值转换为字符串
- python-3.x - 在 Python3 中将字符串列表转换为字节
- ruby-on-rails - Rails 设计在注册时给出回滚消息
- c - C中的if语句问题
- c# - 在 Uno 平台上合并音频和视频
- julia - 使用 Julia 求解具有混合互补条件和相等条件的方程组
- function - 填充+草图
- python - Universal Sentence Encoder TypeError pruunded(text) expected Tensor
- c# - 有什么类似于 F# 中的 Switch Case 命令的吗?