繁体   English   中英

在使用alexa-sdk节点lib时,如何让Alexa Lambda FN不抛出类型错误?

[英]How do I get Alexa Lambda FN not to throw Type Error when using alexa-sdk node lib?

问题塑造

我使用'alexa-sdk'节点库创建了一个Alexa应用程序来构建AWS lambda Alexa应用程序。

const Alexa = require('alexa-sdk');
const handlers = { /* ... */ };

exports.handler = function(event, context) {
  const alexa = Alexa.handler(event, context);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

使用此代码工作得很好,直到我再次上传,那么它停止工作! 当我上传相同版本的代码时,我突然开始收到类型错误。 没有代码被更改。 以下是我正在拉取节点lambda应用程序的方法,以便以后进行AWS上传。

"dependencies": {
  "alexa-sdk": "^1.0.9"
},
"scripts": {
  "zip": "zip -r function.zip package.json *.js node_modules && mkdir -p ../dist && mv function.zip ../dist"
}

您可以通过运行zipinfo ../dist/${lambdaName}来验证正确的压缩(用lambda的函数名替换lambdaName )。

该错误来自于我在Alexa Lambda上使用默认测试文件进行测试时。

错误转储:

TypeError: Cannot read property 'request' of undefined
at AlexaRequestEmitter.ValidateRequest (/var/task/node_modules/alexa-sdk/lib/alexa.js:135:36)
at AlexaRequestEmitter.HandleLambdaEvent (/var/task/node_modules/alexa-sdk/lib/alexa.js:117:25)
at AlexaRequestEmitter.value (/var/task/node_modules/alexa-sdk/lib/alexa.js:92:31)
at exports.handler (/var/task/AgrihackGardenFn.js:78:9)

到底是怎么回事?

我建议你设置默认值,或者将你的lambda测试数据更新为Alexa的请求形状之一。

const Alexa = require('alexa-sdk');
const handlers = { /* ... */ };

const returnDefaultEvent = (event) => Object.assign(
  {},
  {
    request: {
      locale: 'en-US',
      type: 'LaunchRequest'
    },
    session: {
      application: {
        applicationId: 'applicationId'
      },
      user: {
        userId: 'userId'
      }
    }
  },
  event
);

exports.handler = function(event, context) {
  const alexa = Alexa.handler(returnDefaultEvent(event), context);
  alexa.registerHandlers(handlers);
  alexa.execute();
};

我写这个是因为在代码中修复它比更新AWS测试合同方式更容易。 事实证明,这个库请求的对象形状比request具有更多的值(参见默认FN)。

这允许Alexa应用程序恢复运行,如果您愿意,可以通过Alexa开发人员门户网站UI进行测试!

不知道为什么代码突然在AWS lambda上破坏了,但是这个猴子补丁解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM