【问题标题】:How do I get Alexa Lambda FN not to throw Type Error when using alexa-sdk node lib?使用 alexa-sdk 节点库时,如何让 Alexa Lambda FN 不抛出类型错误?
【发布时间】:2017-04-25 01:17:20
【问题描述】:

问题塑造

我使用 '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();
};

这段代码使用工作得很好,直到我再次上传,然后它就停止工作了!当我上传相同版本的代码时,我突然开始出现类型错误。没有更改任何代码。下面是我如何压缩 node 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}(将 lambdaName 替换为我的 lambda 函数名称)来验证正确的压缩。

错误来自我在 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)

发生了什么事?

【问题讨论】:

    标签: node.js amazon-web-services alexa


    【解决方案1】:

    我建议您设置默认值,或将您的 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 开发人员门户 Web UI 进行测试!

    不知道为什么代码在 AWS lambda 上突然中断,但这个猴子补丁解决了这种情况。

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多