gpt4 book ai didi

node.js - 使用nodejs和Alexa查询dynamodb返回多个项目

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:41 25 4
gpt4 key购买 nike

我对这一切都很陌生,所以提前道歉。我正在尝试使用 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 读回所有项目?

我已经在我的 intent 中设置了以下代码,并且效果很好:

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 函数进行更新,因此我目前无法获取有关它的更多信息。

最佳答案

如果有人感兴趣,我解决了这个问题。就像确保发送到 Alexa 的响应仅触发一次一样简单。

我对此很陌生,因此尽管代码可以按要求工作,但我愿意接受有关最佳实践的任何建议。

function queryDynamoDate_single() {
const startdate = this.attributes['startdate'];


var say = '';

var params = {
TableName: 'Cinema',
KeyConditionExpression: "#date = :yymmdd and #time between :time1 and :time2",
ExpressionAttributeNames:{
"#date": "date",
"#time": "time"

},
ExpressionAttributeValues: {
":yymmdd":startdate,
":time1":'0',
":time2":'2'
}
};

readDynamoItem(params, myResult=>{
say = myResult;
say = 'you asked,. The answer is: ' + myResult;

this.response.speak(say).listen('try again');
this.emit(':responseReady');

});
}

.

function readDynamoItem(params, callback) {
var title = [];
var time = [];
var noofitems = 0;
let speechOutput = "";

docClient.query(params, (err, data) => {
if (err) {
this.emit(':tell', 'Test Error');
} else {
console.log("Query succeeded.");
data.Items.forEach(function(item) {
console.log(" -", item.title + ": ");
noofitems = noofitems + 1;
title[noofitems] = item.title;
time[noofitems] = item.time;
});

for (var l = 1; l <= noofitems ; l++){
{
speechOutput = speechOutput + title[l];
}

callback(speechOutput);
}
});

}

关于node.js - 使用nodejs和Alexa查询dynamodb返回多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com