我正在使用ask-sdk编写一个node.js技能,并使用alexa-skill-local测试端点。我需要在其中一个处理程序中将数据持久保存到DynamoDb。但是我不断收到“缺少区域错误”。请在下面找到我的代码:
'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();
在处理程序之一中,我试图获取如下持久属性:
handlerInput.attributesManager.getPersistentAttributes().then((data) => {
console.log('--- the attributes are ----', data)
})
但是我不断收到以下错误:
(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读取和写入属性吗?我们是否需要一些不同的设置来实现这一目标?
谢谢
答案 0 :(得分:1)
我知道这是一个非常老的话题,但是几天前我遇到了同样的问题,我将解释一下它是如何工作的。 您必须在本地下载DynamoDB,并按照here
中的说明进行操作。一旦您配置了本地DynamoDB并检查它是否正常工作。您必须通过代码将其传递给DynamoDbPersistenceAdapter构造函数。 您的代码应类似于:
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
});
在aws config和凭据文件中定义了<your-acces-key-id>
,<your-secrete-access-key>
和<your-region>
的地方。
下一步是照常使用alexa-skill-local
命令启动服务器。
希望这会有所帮助! =)
答案 1 :(得分:0)
大概您有一个在本地运行时技能正在使用的AWS配置文件。
您需要编辑.config文件并在其中设置默认区域(即us-east-1)。该区域应与表所在的区域匹配。
或者,如果您希望能够完全隔离地运行,则可能需要编写条件逻辑并将dynamo客户端与一个针对您的计算机上运行的DynamoDB Local实例的实例交换。