【发布时间】:2018-06-21 02:11:52
【问题描述】:
我对这一切都不熟悉,所以提前道歉。我正在尝试使用 nodejs 和 lambda 查询 Dynamodb,以便让 Alexa 返回值。 dynamodb 表的设置如下所示:
date time filmname
2018-01-04 13:00 Titanic
2018-01-04 15:30 Titanic
2018-01-04 18:30 Paddingtion
2018-01-05 12:00 Star Wars
我的桌子设置有: 主分区键 = 日期(字符串) 主排序键 = 时间(字符串)
现在我想做的是从 dynamodb 查询或获取特定日期的信息,因此对于 2018-01-04 3 项应该返回。这是否可以在 Lambda 中使用 nodejs 并允许 alexa 读回所有项目?
我已经在我的意图中设置了以下代码,并且效果很好:
var params = {
TableName: 'Cinema',
Key:{ "date": "2018-01-04", "time" : "13:00" }
};
docClient.get(params, (err, data) => {
if (err) {
this.emit(':tell', 'Test Error');
} else {
this.emit(':tell', 'Test Working ' + data.Item.title);
}
});
如预期的那样,上面的代码返回了泰坦尼克号。但是,我不知道如何让它返回给定日期的所有项目,而不仅仅是那个特定时间。
我能够独立运行这个 js 代码(即不在 lambda 中),并且工作正常。尽管我怀疑这不是最好的方法。
var params = {
TableName: 'Cinema',
KeyConditionExpression: "#date = :yymmdd and #time between :time1 and :time2",
ExpressionAttributeNames:{
"#date": "date",
"#time": "time"
},
ExpressionAttributeValues: {
":yymmdd":"2018-01-04",
":time1":'0',
":time2":'2'
}
};
docClient.query(params, function(err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
data.Items.forEach(function(item) {
console.log(" -", item.title + ": ");
});
}
});
现在,如果我在 Lambda 中运行此代码并尝试测试我得到的技能“无法调用远程端点,或者它返回的响应无效。”此外,由于某种原因,我的 cloudwatch 日志没有针对该特定 lambda 函数进行更新,因此我目前无法获得更多信息。
【问题讨论】:
标签: node.js aws-lambda alexa alexa-skills-kit