首页 > 解决方案 > 延迟 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');
  });

标签: javascriptnode.jsaxios

解决方案


有一个名为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)
  // ..
  });

推荐阅读