TypeError:无法读取未定义的属性“消息”-Twitter API
Posted
技术标签:
【中文标题】TypeError:无法读取未定义的属性“消息”-Twitter API【英文标题】:TypeError: Cannot read property 'message' of undefined - Twitter API 【发布时间】:2018-10-09 09:40:03 【问题描述】:下面是运行 app.js 时的输出。当一切正常时,这开始完全随机发生。完全没有任何改变。
TypeError: Cannot read property 'message' of undefined
at /home/ec2-user/environment/rt-bot/app.js:78:48
at Request._callback (/home/ec2-user/environment/node_modules/twitter/lib/twitter.js:220:14)
at Request.self.callback (/home/ec2-user/environment/node_modules/request/request.js:186:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request.<anonymous> (/home/ec2-user/environment/node_modules/request/request.js:1163:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage.<anonymous> (/home/ec2-user/environment/node_modules/request/request.js:1085:12)
at IncomingMessage.g (events.js:292:16)
我尝试从我的主分支创建新实例(自上次工作以来没有提交),甚至仍然收到此错误。有什么想法吗?
导致错误的代码,尽管此代码以前可以工作。
T.get('search/tweets', query, function(err, data, response)
// continue if no errors
if(!err)
// loop
for(let i = 0; i < data.statuses.length; i++)
// get latest tweet ID
let id = id: data.statuses[i].id_str
// try favorite
T.post('favorites/create', id, function(err, response)
// log failures
if(err)
console.log('Try Favorite - ', err[0].message);
// log success
else
let username = response.user.screen_name;
let tweetId = response.id_str;
console.log('Favorited: ', `https://twitter.com/$username/status/$tweetId`)
);
第一次出现的图片。如您所见,一切正常,然后这个错误突然出现,环境或代码库完全没有变化。
更新:
使用console.log('Try Favorite - ', err.message);
而不是console.log('Try Favorite - ', err[0].message);
记录错误时的输出
[[Apr 28 21:27:00.702]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.705]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.706]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.707]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.708]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.709]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.712]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.713]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.718]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
[[Apr 28 21:27:00.793]] [LOG] Try Favorite - HTTP Error: 429 Too Many Requests
另请注意,转推功能使用相同的控制台日志记录方法。请参阅下面的代码,并且输出正常。
// try retweet
T.post('statuses/retweet', id, function(err, response)
// log failures
if(err)
console.log('Try Retweet - ', err[0].message);
【问题讨论】:
尝试在没有 [0] 的情况下记录错误 我目前正在检查速率限制,看看它们是否可能在当天的收藏夹中受到速率限制,尽管通常它的输出不同,它可以解释发生的随机性。 GET 收藏/列表速率限制为每个窗口 75(15 分钟),而 GET 搜索/推文为 180(用户)- 450(应用)每个窗口。快速运行所有请求的编号。 所以,如果我理解正确,我收到错误的原因是因为它请求代码 429 消息,而不是可能以不同方式传递的“你已经收藏了这条推文”消息?但是,运行这些数字,似乎用户不应该受到速率限制,并且速率限制应该在新窗口开始时释放,但这种情况已经发生了更长的时间。 【参考方案1】:Twit 使用 request 向 Twitter API 发送 HTTP 请求,因此错误将是单个对象而不是数组,因此您的错误处理程序看起来像
if(err)
console.log('Try Favorite - ', err.message);
【讨论】:
感谢您的回答,但请参阅底部的编辑,因为不幸的是这也不起作用。 现在您可以看到真正的错误...请求太多...您在 twitter api 中遇到了一些限制 使用err.message
而不是err[0].message
显然解决了代码中的问题,并向您展示了问题的原因,超出了请求速率限制developer.twitter.com/en/docs/basics/rate-limits
你可以试试github.com/jhurliman/node-rate-limiter来帮你避免达到极限
我已经在使用该速率限制器中的做法,但是非常好的建议!我不确定什么会受到限制。只有帖子收藏夹/创建受到限制,而所有其他功能似乎都运行良好。我很难找到真正的 POST 限制,除了 hints 每天 1000 个,但收藏夹/创建 POST 请求少于 12 个,并且所有其他 POST 请求都正常。有趣的是,控制台日志记录 err.message 在未获得 HTTP 状态 429 时拒绝工作。以上是关于TypeError:无法读取未定义的属性“消息”-Twitter API的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js 在尝试将游戏消息转换为不和谐消息时给我留下“TypeError:无法读取未定义的属性 'includes'”
TypeError:无法读取 MEAN 堆栈中未定义的属性“_id”
NodeJs,mongoDB:TypeError:无法读取未定义的属性“全名”
React js TypeError:无法读取未定义的属性“参数”
(节点:4044)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“缓存”