1. ホーム
  2. javascript

[解決済み] TypeError: 未定義のプロパティ 'message' を読み取ることができません - Twitter API

2022-02-05 08:42:15

質問

以下は、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)

masterブランチから新しいインスタンスを作成してみましたが、まだこのエラーが発生します。何か思い当たることはありますか?

エラーの原因となっているコード このコードは以前は動作していたのですが。

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}`)
        }

      });

初回発生時の画像 . ご覧のように、すべてがうまく機能していたのに、環境にもコードベースにもまったく変更がないのに、このエラーが突然発生したのです。

UPDATE

でエラーログを記録した場合の出力 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);
        }

解決方法は?

ツイート 用途 リクエスト は Twitter API への HTTP リクエストを送信するため、エラーは配列ではなく単一のオブジェクトになります。したがって、エラーハンドラは次のようになります。

if(err){
  console.log('Try Favorite - ', err.message);
}