首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用nodejs和Alexa查询dynamodb以返回多个项

使用nodejs和Alexa查询dynamodb以返回多个项
EN

Stack Overflow用户
提问于 2018-01-12 00:59:39
回答 1查看 659关注 0票数 1

我对这一切都是新手,所以提前道歉。我正在尝试使用nodejs和lambda查询Dynamodb,这样我就可以让Alexa返回值。dynamodb表的设置类似于:

代码语言:javascript
运行
复制
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回读所有项?

我已经在我的意图中设置了以下代码,并且运行良好:

代码语言:javascript
运行
复制
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中),而且运行得很好。尽管我怀疑这不是最好的方法。

代码语言:javascript
运行
复制
 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函数进行更新,因此目前我无法获得有关它的更多信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 07:23:17

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

我是新手,所以尽管代码按要求工作,但我对最佳实践的任何建议都持开放态度。

代码语言:javascript
运行
复制
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');

    });         
}

代码语言:javascript
运行
复制
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);
        }
    });

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

https://stackoverflow.com/questions/48212295

复制
相关文章

相似问题

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