2015-10-07 3 views
1

Я пытаюсь отправить sms (который работает в API-интерфейсе Twilio), но, похоже, не работает при установке моего узла. Я только что сделал полную деинсталляцию и переустановил безрезультатно.TypeError: Не удается прочитать свойство 'sid' undefined

Ошибка

7 Oct 21:28:37 - [nodemon] starting `node scraper.js` 
Free on Xbox One, Xbox 360, PS3, PS4: Tales from the Borderlands (Episode 1) 
/Users/rhysedwards/Downloads/insightful/ozbargain/node_modules/twilio/node_modules/q/q.js:126 
        throw e; 
        ^

TypeError: Cannot read property 'sid' of undefined 
    at /Users/rhysedwards/Downloads/insightful/ozbargain/scraper.js:39:31 
    at /Users/rhysedwards/Downloads/insightful/ozbargain/node_modules/twilio/node_modules/q/q.js:1924:17 
    at flush (/Users/rhysedwards/Downloads/insightful/ozbargain/node_modules/twilio/node_modules/q/q.js:108:17) 
    at doNTCallback0 (node.js:408:9) 
    at process._tickCallback (node.js:337:13) 
7 Oct 21:28:39 - [nodemon] app crashed - waiting for file changes before starting... 

Ошибка с раздели обратно кода Twilio;

7 Oct 22:24:44 - [nodemon] starting `node scraper.js` 
/Users/rhysedwards/Downloads/insightful/ozbargain/node_modules/twilio/node_modules/q/q.js:126 
        throw e; 
        ^

TypeError: Cannot read property 'sid' of undefined 
    at /Users/rhysedwards/Downloads/insightful/ozbargain/scraper.js:12:24 
    at /Users/rhysedwards/Downloads/insightful/ozbargain/node_modules/twilio/node_modules/q/q.js:1924:17 
    at flush (/Users/rhysedwards/Downloads/insightful/ozbargain/node_modules/twilio/node_modules/q/q.js:108:17) 
    at doNTCallback0 (node.js:408:9) 
    at process._tickCallback (node.js:337:13) 
7 Oct 22:24:46 - [nodemon] app crashed - waiting for file changes before starting... 

код

var accountSid = 'AC*******'; 
var authToken = 'da********'; 

var fs = require('fs'), 
    request = require('request'), 
    cheerio = require('cheerio'), 
    client = require('twilio')(accountSid, authToken); 

url = 'http://www.ozbargain.com.au'; 

request(url, function(error, response, html) { 
    if (!error && response.statusCode == 200) { 
     var $ = cheerio.load(html); 
     var $el = $("a:contains('Xbox')"); 

     if ($el.length) { 
      client.messages.create({ 
      to: "61448141065", 
      from: "+61418739508", 
      body: "hey", 
      }, function(err, message) { 
      console.log(message.sid); 
      }); 
      console.log($el.text()); 
     } else { 
      console.log('hey'); 
     } 
    } 
}); 

ответ

2

Обратный вызов из client.messages.create используется как

}, function(err, message) { 
    console.log(message.sid); 
}); 

Когда будет ошибка, первый параметр обратного вызова err будет содержать информацию, относящуюся к ошибке , а второй параметр message будет undefined.

Обновить код, как следовать, чтобы обрабатывать ошибочные условия

}, function (err, message) { 
    if (err) { 
     // Handle error 
     // Show appropriate message to user 
    } else { 
     // No error 

     if (message.sid) { 
      // Use sid here 

     } 
    } 
    console.log(message.sid); 
}); 
+0

Извините, но это не исправило проблему. Nodemon все еще вылетает с 'TypeError: Невозможно прочитать свойство sid 'undefined'. Я считаю, что проблема должна заключаться в том, как узел получает доступ к модулю узла Twilio. –

+0

@RhysEdwards Вы использовали '.sid' где-либо еще в коде, если да, то добавьте аналогичный код.Кроме того, проверьте, является ли ответ в 'message' – Tushar

+0

. Это весь источник кода, который я написал (очевидно, зависящий от модулей, которые вызывают). Сообщение об отсутствии ответа не получено. Предполагая, что это произошло из-за сбоя TypeError. –

0

Twilio разработчик евангелист здесь.

Есть несколько вещей, которые не соответствуют вашему коду на стороне сумерек.

client.messages.create({ 
    to: "61448141065", 
    from: "+61418739508", 
    body: "hey", 
}, function (err, message) { 
    console.log(message.sid); 
}); 

на To Вы пропускаете + перед номером телефона, и после того, как тело, у вас есть лишняя запятая, которые вам необходимо удалить.

Ваш окончательный код должен выглядеть следующим образом:

var accountSid = 'AC*******'; 
var authToken = 'da********'; 

var fs = require('fs'), 
    request = require('request'), 
    cheerio = require('cheerio'), 
    client = require('twilio')(accountSid, authToken); 

url = 'http://www.ozbargain.com.au'; 

request(url, function(error, response, html) { 
    if (!error && response.statusCode == 200) { 
     var $ = cheerio.load(html); 
     var $el = $("a:contains('Xbox')"); 

     if ($el.length) { 
      client.messages.create({ 
      to: "+61448141065", 
      from: "+61418739508", 
      body: "hey" 
      }, function(err, message) { 
      console.log(message.sid); 
      }); 
      console.log($el.text()); 
     } else { 
      console.log('hey'); 
     } 
    } 
}); 

Я тестировал его здесь, и она работала отлично после изменения этого.

Надеюсь, это вам поможет.

UPDATE: Попробуйте изменить свой код, чтобы только это:

var accountSid = 'AC*******'; 
var authToken = 'da********'; 

var fs = require('fs'), 
    client = require('twilio')(accountSid, authToken); 

client.messages.create({ 
    to: "+61448141065", 
    from: "+61418739508", 
    body: "hey" 
}, function (err, message) { 
    console.log(message.sid); 
}); 
+0

хороший улов на запятой и плюсом. К сожалению, он все еще не работает с sid TypeError; начинаю думать, что это может быть забавная установка узла, но не может ее найти. –

+0

@RhysEdwards взгляните на мое обновление. Это должно определенно работать. –

+0

Эй, @marcosplancona, оцените помощь. Дайте ему пойти, и он все еще терпит неудачу. Это довольно странная проблема, поэтому я сделал чистую установку узла/npm. Возможно, это новый узел версии v4.1.2? Я добавил последний сброс ошибки в OP. –

2

Вы можете просто изменить console.log (message.sid); к

if(err) { 
    console.log(err.message); 
} 
+0

Добро пожаловать в StackOverflow! Пожалуйста, расширьте свой ответ и объясните, почему это решает проблему. Как и сейчас, это больше похоже на комментарий, и те удаляются довольно быстро, если postet в качестве ответа –

0

Это потому, что ваш звонок не удалось, и нет объекта сообщения. Заменить

console.log(message.sid); 

с

if (err) console.log(err.message); 
if (message) console.log(message.sid); 

Тогда вы увидите сообщение об ошибке.

Смежные вопросы