2016-11-27 1 views
0

Я пытаюсь решить проблему с помощью Alexa Skill прямо сейчас. Я смотрел и читал много учебников и пытался его искать, но я всегда получаю загадочное сообщение об ошибке от Node.js ... Я просто пытаюсь отправить HTTP-запрос, поэтому ничего сложного.node.js не может прочитать свойство «New»

Мой код выглядит следующим образом:

var https = require('https') 

exports.handler = (event, context) => { 

    try { 

    if (event.session.new) { 
     console.log("NEW SESSION") 
    } 

    switch (event.request.type) { 

     case "LaunchRequest": 
     console.log(`LAUNCH REQUEST`) 
     context.succeed(
      generateResponse(
      buildSpeechletResponse("Willkommen bei Taasker", true), 
      {} 
     ) 
     ) 
     break; 

     case "IntentRequest": 
     console.log(`INTENT REQUEST`) 

     switch(event.request.intent.name) { 
      case "taskernightlighton": 
      var endpoint = "" 
      var body = "" 
      http.request("https://autoremotejoaomgcd.appspot.com/sendmessage?key=xxxxxxxxxxxxx&message=nightlighton") 
      context.succeed(
       generateResponse(
        buildSpeechletResponse(`Licht wird von Taasker eingeschaltet`, true), 
        {} 
       ) 
      ) 
      break; 

      case "taskernightlightoff": 
      http.request("https://autoremotejoaomgcd.appspot.com/sendmessage?key=xxxxxxxxxx&message=nightlightoff") 
      context.succeed(
       generateResponse(
        buildSpeechletResponse(`Licht wird von Taasker ausgeschaltet`, true), 
        {} 
       ) 
      ) 
      break; 

      default: 
      throw "Invalid intent" 
     } 

     break; 

     case "SessionEndedRequest": 
     console.log(`SESSION ENDED REQUEST`) 
     break; 

     default: 
     context.fail(`INVALID REQUEST TYPE: ${event.request.type}`) 

    } 

    } catch(error) { context.fail(`Exception: ${error}`) } 

} 

// Helpers 
buildSpeechletResponse = (outputText, shouldEndSession) => { 

    return { 
    outputSpeech: { 
     type: "PlainText", 
     text: outputText 
    }, 
    shouldEndSession: shouldEndSession 
    } 

} 

generateResponse = (speechletResponse, sessionAttributes) => { 

    return { 
    version: "1.0", 
    sessionAttributes: sessionAttributes, 
    response: speechletResponse 
    } 

} 

И я всегда получаю следующее сообщение об ошибке:

{ 
    "errorMessage": "Exception: TypeError: Cannot read property 'new' of undefined" 
} 

Может кто-то дать мне намек, что не так с моим яваскрипта синтаксисом? Я не могу найти источник, объясняющий этот http-запрос? Пожалуйста, помогите ...

ответ

2

Я могу сказать вам, что означает сообщение об ошибке. Сообщение об ошибке не является загадочным вообще.

"Exception: TypeError: Cannot read property 'new' of undefined" 

По-видимому, у вас есть объект, который имеет свойство new. Поэтому, не читая ваш код, я теперь знаю, что у вас есть объект, который выглядит примерно как myObject.new. Ошибка говорит о том, что myObject не определен и поэтому не может получить доступ к значению в new, потому что нет значения. Переводчик смотрит на него, как это:

var myObject = undefined

И что вы пытаетесь сделать, это:

myObject.new, который в основном рассматривается во время выполнения, как undefined.new, что не возможно.

Позволяет получить практический

Когда я сделал CTRL + F в вашей программе я обнаружил, что у вас есть:

if (event.session.new) {

Так моя догадка выглядит следующим образом: либо event не определен или session не определено. Это дает ошибку, которая вызывает следующий вопрос: как вы вызываете экспортированный handler? У вас может быть проблема.

Другой вопрос: делает console.log log "NEW SESSION"?