【发布时间】:2018-08-27 04:50:09
【问题描述】:
我是 dynamoDB 的新手,我正在尝试使用 Lambda 将一些数据写入表。 到目前为止,我有这个:
'AddFood': function () {
var FoodName = this.event.request.intent.slots.FoodName.value;
var FoodCalories = this.event.request.intent.slots.FoodCalories.value;
console.log('FoodName : ' + FoodName);
const params = {
TableName: 'Foods',
Item: {
'id': {"S": 3},
'calories': {"S": FoodCalories},
'food': {"S": FoodName}
}
};
writeDynamoItem(params, myResult=>{
var say = '';
say = myResult;
say = FoodName + ' with ' + FoodCalories + ' calories has been added ';
this.response.speak(say).listen('try again');
this.emit(':responseReady');
});
function writeDynamoItem(params, callback) {
var AWS = require('aws-sdk');
AWS.config.update({region: AWSregion});
var docClient = new AWS.DynamoDB();
console.log('writing item to DynamoDB table');
docClient.putItem(params, function (err, data) {
if (err) {
callback(err, null)
} else {
callback(null, data)
}
});
}
}
有谁知道为什么数据没有出现在数据库中? 我检查了 IAM 并且策略设置为 AmazonDynamoDBFullAccess。
【问题讨论】:
-
一般来说,您应该使用 get() 或 query() 而不是 scan(),因为扫描会读取每个项目。下面是调用 putItem 的 JS 示例:docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/…
-
感谢您的提示。您知道为什么上面的代码没有将项目放入数据库吗?
-
putItem() 调用是否失败?您如何检查该项目是否未写入?您是否有可能在多个区域中拥有同名表并且正在写入错误的表? PS您的 docClient 名称错误。 SDK 有两个接口(服务接口和文档客户端) - 您使用的是前者,但您的变量被命名为就好像您使用的是后者一样。
-
我正在亚马逊开发者网站上通过运行该技能对其进行测试。我只有一张表,我通过进入 dynamoDB 并查看表中的项目来检查它。该调用似乎正在执行,但表中没有显示任何新内容。知道有什么问题吗?
-
愿意分享问题所在吗?
标签: amazon-web-services aws-lambda amazon-dynamodb alexa alexa-skills-kit