首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >alexa skill local无法写入dynamodb

alexa skill local无法写入dynamodb
EN

Stack Overflow用户
提问于 2018-09-20 19:33:33
回答 2查看 767关注 0票数 0

我正在使用ask-sdk编写一个本地技能,并使用alexa- node.js -local测试端点。我需要将数据持久化到其中一个处理程序中的DynamoDb。但我一直收到“缺少区域错误”。请在下面找到我的代码:

代码语言:javascript
复制
'use strict';

// use 'ask-sdk' if standard SDK module is installed
const Alexa = require('ask-sdk');

const { launchRequestHandler, HelpIntentHandler, CancelAndStopIntentHandler, SessionEndedRequestHandler } = require('./commonHandlers');

const ErrorHandler = {
    canHandle() {
        return true;
    },
    handle(handlerInput, error) {
        return handlerInput.responseBuilder
            .speak('Sorry, I can\'t understand the command. Please say again.')
            .reprompt('Sorry, I can\'t understand the command. Please say again.')
            .getResponse();
    },
};

////////////////////////////////
// Code for the handlers here //
////////////////////////////////
exports.handler = Alexa.SkillBuilders
    .standard()
    .addRequestHandlers(
        launchRequestHandler,
        HelpIntentHandler,
        CancelAndStopIntentHandler,
        SessionEndedRequestHandler,
        ErrorHandler
    )
    .withTableName('devtable')
    .withDynamoDbClient()
    .lambda();

在其中一个处理程序中,我尝试获取持久化属性,如下所示:

代码语言:javascript
复制
handlerInput.attributesManager.getPersistentAttributes().then((data) => {
    console.log('--- the attributes are ----', data)
})

但我一直收到以下错误:

代码语言:javascript
复制
(node:12528) UnhandledPromiseRejectionWarning: AskSdk.DynamoDbPersistenceAdapter Error: Could not read item (amzn1.ask.account.AHJECJ7DTOPSTT25R36BZKKET4TKTCGZ7HJWEJEBWTX6YYTLG5SJVLZH5QH257NFKHXLIG7KREDKWO4D4N36IT6GUHT3PNJ4QPOUE4FHT2OYNXHO6Z77FUGHH3EVAH3I2KG6OAFLV2HSO3VMDQTKNX4OVWBWUGJ7NP3F6JHRLWKF2F6BTWND7GSF7OVQM25YBH5H723VO123ABC) from table (EucerinSkinCareDev): Missing region in config
    at Object.createAskSdkError (E:\projects\nodejs-alexa-sdk-v2-eucerin-skincare-dev\node_modules\ask-sdk-dynamodb-persistence-adapter\dist\utils\AskSdkUtils.js:22:17)
    at DynamoDbPersistenceAdapter.<anonymous> (E:\projects\nodejs-alexa-sdk-v2-eucerin-skincare-dev\node_modules\ask-sdk-dynamodb-persistence-adapter\dist\attributes\persistence\DynamoDbPersistenceAdapter.js:121:45)

我们可以使用alexa-skill local从DynamoDb中读取和写入属性吗?我们需要一些不同的设置来实现这一点吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-04-23 16:53:23

我知道这是一个非常古老的话题,但几天前我遇到了同样的问题,我将解释我是如何做到这一点的。您必须在本地下载DynamoDB并按照here中的说明进行操作

配置好本地DynamoDB并检查它是否正常工作后。你必须通过你的代码把它传递给DynamoDbPersistenceAdapter构造函数。您的代码应该类似于:

代码语言:javascript
复制
var awsSdk = require('aws-sdk');
var myDynamoDB = new awsSdk.DynamoDB({
    endpoint: 'http://localhost:8000', // If you change the default url, change it here
    accessKeyId: <your-access-key-id>,
    secretAccessKey: <your-secret-access-key>,
    region: <your-region>,
    apiVersion: 'latest'
});

const {DynamoDbPersistenceAdapter} = require('ask-sdk-dynamodb-persistence-adapter');
return new DynamoDbPersistenceAdapter({
    tableName: tableName || 'my-table-name',
    createTable: true,
    dynamoDBClient: myDynamoDB
});

其中,<your-acces-key-id><your-secrete-access-key><your-region>在亚马逊网络服务配置和凭证文件中定义。

下一步是像往常一样使用alexa-skill-local命令启动您的服务器。

希望这将是有益的!=)

票数 1
EN

Stack Overflow用户

发布于 2018-09-23 00:54:45

假设您有一个AWS配置文件,您的技能将在本地运行时使用。

您需要编辑.config文件并在其中设置默认区域(即us-east-1)。区域应该与您的表所在的区域相匹配。

或者,如果您希望能够完全隔离地运行,则可能需要编写come条件逻辑,并将发电机客户端与您的机器上运行的DynamoDB本地实例交换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52424226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档