我正在尝试解决我的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请求的来源?请帮忙......
答案 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"
?