在其他文件中配置AWS时出现ConfigError(在本地使用DynamoDB)

时间:2017-04-15 09:02:26

标签: javascript node.js amazon-dynamodb aws-sdk alexa-skills-kit

我尝试通过在单独的文件中配置AWS来将DynamoDB与Alexa SDK一起使用。

我通过在index.js中配置AWS来测试我的Alexa技能是否有效:

const Alexa = require("alexa-sdk");
const AWS   = require("aws-sdk");
setupDynamoDB();

// my code ...

function setupDynamoDB (alexa) {
    AWS.config.update({
        region: 'us-east-1',
        endpoint: 'http://localhost:8000'
    });
}

我认为如果我在其他地方创建setupDynamoDB()函数并导入它会更有趣,所以我尝试了。

index.js

const Alexa = require("alexa-sdk");
const AWS   = require("./dynamodb").setupDynamo();

dynamodb.js

const AWS = require("aws-sdk");

module.exports = {
    setupDynamo: function (alexa) {
        AWS.config.update({
            region: 'us-east-1',
            endpoint: 'http://localhost:8000'
        });
    }
    return AWS;
};

即使使用return语句,我的技能似乎也无法访问该表,这很奇怪,因为它似乎(至少对我而言)我正在定义一个已配置的AWS对象而不是运行两步流程(定义AWS 然后配置)。

我正在使用bespoken-tools代理来测试技能,我得到的错误信息是:

get error: {
    "message": "Missing region in config",
    "code": "ConfigError",
    "time": "2017-04-15T08:38:55.858Z"
}

我还没有尝试过,这是否适用于Alexa Simulator,因为我的目标是让它与bst一起使用。我也试图利用Alexa SDK对DynamoDB的内置支持,因此简化了配置过程(我发现的几乎所有其他资源都创建了一个DynamoDB对象,我没有&#39 ;打算这样做。)

我在这里做错了什么?我能提出的唯一解释是,返回的AWS对象与我在setupDynamoDB()内定义并调用index.js返回的对象不同。但我无法弄清楚为什么会这样。

编辑:我想出了一个解决方案,但我不确定它是否是预期的行为。基本上,return AWS对象的return不起作用,但声明{em>和 Alexa const Alexa = require("./dynamodb").setupDynamo(); 对象会起作用。请参阅下面的代码。

index.js

exports.setupDynamo = function (alexa) {
    const AWS = require("aws-sdk");
    AWS.config.update({
        region: "us-east-1",
        endpoint: "http://localhost:8000"
    });
    const Alexa = require("alexa-sdk");
    return Alexa
};

dynamodb.js

AWS

基本上,return对象的更新配置在rand()编辑时丢失。这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

我认为问题在于您的通话顺序。如果你在调用require('alexa-sdk')之前调用setupDynamo,那么它应该可以工作。

alexa-sdk立即开始使用Dynamo,因此需要先进行任何配置更改。