如何解决 Node.js 中的“请求过多”错误?

Posted

技术标签:

【中文标题】如何解决 Node.js 中的“请求过多”错误?【英文标题】:How Do I Resolve this 'Too Many Requests' Error in Node.js? 【发布时间】:2019-04-07 05:47:51 【问题描述】:

我正在尝试通过连续使用HTTP requestsAxios 来构建JSON 文件:

    获取对象(项目)数组 在每个名为 attachments 的项目中创建一个数组属性 获取每个项目的任务 获取每个任务的附件 将每个项目的任务附件推送到项目的附件数组中 从修改后的项目数组中创建一个JSON 文件

代码:

let getProjects = function() 
  try 
    return axios.get('https://app.asana.com/api/1.0/projects/')
   catch (error) 
    console.error(error)
  


let getTasks = function(project) 
  try 
    return axios.get('https://app.asana.com/api/1.0/projects/'+project+'/tasks')
   catch (error) 
    console.error(error)
  


let getAttachments = function(task) 
  try 
    return axios.get('https://app.asana.com/api/1.0/tasks/'+task+'/attachments')
   catch (error) 
    console.error(error)
  


async function getAsanaData() 
  let projects = await getProjects()
  return Promise.all(projects.data.data.map(async (project) => 
      project.attachments = []
      let tasks = await getTasks(project.gid)
      return Promise.all(tasks.data.data.map(async (task) => 
        let attachments = await getAttachments(task.gid)
        project.attachments = !!attachments ? project.attachments.concat(attachments.data.data) : project.attachments 
        return project
      ))
  ))


getAsanaData()
.then((projects) =>   
  var asanaData = safeJsonStringify(projects);
  fs.writeFile("thing.json", asanaData);
)
.catch(err=>console.log(err))

但我遇到了这个错误:

status: 429,
statusText: 'Too Many Requests

我还没有发现任何有用的信息来解决它。我能做什么?

【问题讨论】:

听起来,正如它所说,您发出了太多请求,也许 - 您使用当前代码连续发出多少个请求? 您需要限制您的请求 - 体式可能会限制您。推荐使用下划线或lodash。两者都有一个节流方法来减慢请求的速度。 @CertainPerformance 道歉;我还不知道如何获得反馈,例如尝试的请求数量。但了解数据后,可能有数千个。 阅读: asana.com/developers/documentation/getting-started/rate-limits projects.data.data 数组有多大? 【参考方案1】:

您因发送过多请求并达到最大速率而受到 Asana 限制。

发生这种情况时,您需要检查Retry-After 响应标头并等待指定的时间,然后再发送另一个请求。

https://asana.com/developers/documentation/getting-started/rate-limits

您也可以在RFC 6585 about HTTP 429了解更多信息

【讨论】:

【参考方案2】:

HTTP 响应状态代码 429 表示发送的请求过多,超出了服务器的处理能力。它也被记录在https://asana.com/developers/documentation/getting-started/errors。如https://asana.com/developers/documentation/getting-started/rate-limits 所述,允许的最大值为每分钟 150 次。

所以,是的,正如@Randy Casburn 评论的那样,您将不得不限制您的请求。

【讨论】:

以上是关于如何解决 Node.js 中的“请求过多”错误?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js:啥是 ENOSPC 错误以及如何解决?

Node.js 中的错误“未定义窗口”

如何解决 Cloud Functions 项目中的新 ESLint 错误?

如何使用 Node.js 解决“找不到模块”错误?

解决 Node.js 中的“Uncaught ReferenceError: require is not defined”错误

使用 node.js 以错误的 mime 类型发送样式表,我该如何解决?