在DynamoDB

时间:2018-03-06 18:45:09

标签: javascript aws-lambda amazon-dynamodb alexa

我正在尝试将DynamoDB中的两个表链接到Amazon Alexa技能。我使用两个表,一个名为'yesno',另一个名为'fixtures'。 fixtures表有一个包含每个记录中22个名称的列表,这些名称与“目标”列一起位于“yesno”表中。在这里,您可以更详细地查看表格。名称表: name table

赛程表: enter image description here

enter image description here

正如您所看到的,有两个数据库链接在一起的名称。我使用team1列搜索fixtures表并使用name列搜索名称表。这是我的搜索代码:

 function readDynamoItem(params2, callback) {
        var AWS = require('aws-sdk');
        AWS.config.update({region: AWSregion});

        var dynamodb = new AWS.DynamoDB();
        const names = new Array();



        console.log('reading item from DynamoDB table');

        dynamodb.scan(params2, function (err, data){
            if (err) console.log(err, err.stack); // an error occurred
            else{
                console.log(data); // successful response
                //tried to put a automatic loop for the long bit of code after this but didnt work so anyone with insight on this too would be helpful
                /*for(var i = 1; i <= 11; i++){
                    var str = "T1S";
                    var pos = i.toString();
                    pos = str.concat(pos);
                    names[i] = jsonToString(data.Items[0].pos);
                }
                for(var j = 1; j <= 11; j++){
                    str = "T2S";
                    pos = j.toString();
                    pos = str.concat(pos);
                    names[(j+11)] = jsonToString(data.Items[0].pos);
                }
                */

                names[1] = jsonToString(data.Items[0].T1S1);
                names[2] = jsonToString(data.Items[0].T1S2);
                names[3] = jsonToString(data.Items[0].T1S3);
                names[4] = jsonToString(data.Items[0].T1S4);
                names[5] = jsonToString(data.Items[0].T1S5);
                names[6] = jsonToString(data.Items[0].T1S6);
                names[7] = jsonToString(data.Items[0].T1S7);
                names[8] = jsonToString(data.Items[0].T1S8);
                names[9] = jsonToString(data.Items[0].T1S9);
                names[10] = jsonToString(data.Items[0].T1S10);
                names[11] = jsonToString(data.Items[0].T1S11);
                names[12] = jsonToString(data.Items[0].T2S1);
                names[13] = jsonToString(data.Items[0].T2S2);
                names[14] = jsonToString(data.Items[0].T2S3);
                names[15] = jsonToString(data.Items[0].T2S4);
                names[16] = jsonToString(data.Items[0].T2S5);
                names[17] = jsonToString(data.Items[0].T2S6);
                names[18] = jsonToString(data.Items[0].T2S7);
                names[19] = jsonToString(data.Items[0].T2S8);
                names[20] = jsonToString(data.Items[0].T2S9);
                names[21] = jsonToString(data.Items[0].T2S10);
                names[22] = jsonToString(data.Items[0].T2S11);
            }
        });

        var goals =  new Array();
        //for loop to be used later when expanding
        //for(var i = 1; i <= 22; i++){
            var params = {
                TableName: 'yesno',
                FilterExpression: 'name = :value',
                ExpressionAttributeValues: {':value': {"S": names[2]}}
            };
            dynamodb.scan(params, function (err, data) {
                if (err) console.log(err, err.stack); // an error occurred
                else{
                    console.log(data); // successful response
                    var temp = jsonToString(data.Items[0].goals);
                    goals[1] = temp; 
                }    
            callback(goals[1]);
            });
        //}
    }
function jsonToString(str){
    str = JSON.stringify(str);
    str = str.replace('{\"S\":\"', '');
    str = str.replace('\"}', '');
    return str;
}

我正在尝试使用目标数组来打印每个人的目标,但现在它甚至不打印一个人,而是打印某种未定义的对象。我猜它只是无法使用names数组搜索名称表。我遇到问题的主要代码是在搜索yesno表时,您可以在此代码中看到:

 var goals =  new Array();
        //for loop to be used later when expanding
        //for(var i = 1; i <= 22; i++){
            var params = {
                TableName: 'yesno',
                FilterExpression: 'name = :value',
                ExpressionAttributeValues: {':value': {"S": names[2]}}
            };
            dynamodb.scan(params, function (err, data) {
                if (err) console.log(err, err.stack); // an error occurred
                else{
                    console.log(data); // successful response
                    var temp = jsonToString(data.Items[0].goals);
                    goals[1] = temp; 
                }    
            callback(goals[1]);
            });
        //}

我确信这个实现没有任何问题,但这是为了以防万一:

const handlers = {
    'LaunchRequest': function () {
        this.response.speak('welcome to magic answers.  ask me a yes or no question.').listen('try again');
        this.emit(':responseReady');
    },


    'MyIntent': function () {
        var MyQuestion = this.event.request.intent.slots.MyQuestion.value;
        console.log('MyQuestion : ' + MyQuestion);


        const params2 = {
            TableName: 'Fixtures',
            FilterExpression: 'team1 = :value',
            ExpressionAttributeValues: {':value': {"S": MyQuestion.toLowerCase()}}
        };
        //const params3 = {
        //    TableName: 'Fixtures',
        //    FilterExpression: 'team2 = :value',
        //    ExpressionAttributeValues: {':value': {"S": MyQuestion.toLowerCase()}}
        //};

        readDynamoItem(params2, myResult=>{
            var say = MyQuestion;
            say = myResult;

            say = 'The top scorer for ' + MyQuestion + ' is ' + myResult;
            this.response.speak(say).listen('try again');
            this.emit(':responseReady');


        });

    },
    'AMAZON.HelpIntent': function () {
        this.response.speak('ask me a yes or no question.').listen('try again');
        this.emit(':responseReady');
    },
    'AMAZON.CancelIntent': function () {
        this.response.speak('Goodbye!');
        this.emit(':responseReady');
    },
    'AMAZON.StopIntent': function () {
        this.response.speak('Goodbye!');
        this.emit(':responseReady');
    }
}

0 个答案:

没有答案