node.js无法读取“New”的属性

时间:2016-11-27 21:26:17

标签: node.js alexa-skills-kit

我正在尝试解决我的Alexa Skill的问题。我观看并阅读了很多教程并尝试搜索它,但我总是从Node.js得到一个神秘的错误消息...... 我只是尝试发送一个http请求,所以没什么复杂的。

我的代码如下:

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"
}

有人可以给我一个提示,我的javascript语法出了什么问题?我找不到解释这个http请求的来源?请帮忙......

1 个答案:

答案 0 :(得分: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是否记录了"NEW SESSION"