如何解决 Node.js 中的“请求过多”错误?
Posted
技术标签:
【中文标题】如何解决 Node.js 中的“请求过多”错误?【英文标题】:How Do I Resolve this 'Too Many Requests' Error in Node.js? 【发布时间】:2019-04-07 05:47:51 【问题描述】:我正在尝试通过连续使用HTTP requests
和Axios
来构建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-limitsprojects.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 中的“请求过多”错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 Cloud Functions 项目中的新 ESLint 错误?
解决 Node.js 中的“Uncaught ReferenceError: require is not defined”错误