Node.js Dynamodb问题使用getItem

时间:2015-08-27 19:24:14

标签: node.js

我编写了以下代码,根据名为id的密钥从Dynamodb表中返回一行。

var db = new AWS.DynamoDB();
var params = {
    AttributesToGet: [
        "dealername"
    ],
    TableName : "syv_dealer",
    Key : {
        "id" : {
            "S" : "1"
        }
    }
}

db.query(params, function(err, data) {
    if (err) {
        console.log(err); // an error occurred
    } else {
        console.log(data); // successful response
    }
});

我将数据写入表中的代码工作正常,但上面的代码仍然生成以下错误:在params中找到意外的键'Key'

该表存在,表中有一个值为“1”的id属性。

我查看了我能找到的所有例子,并且已经将params语句改变了一百次,但没有任何效果。我相信这很简单,但任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

这是失败的,因为Key是用于向该API提交请求的无效参数。查看DynamoDB Query syntax以确定您可以设置的属性。

执行此查询的正确方法是使用KeyConditionExpression,如下所示:

var params = {
    TableName : "syv_dealer",
    KeyConditionExpression: "id = :v1",
    ExpressionAttributeValues: {
      ":v1": {"S": "1"}
    },
    ProjectionExpression: "dealername"
}

使用ProjectionExpression代替AttributesToGet也是指定属性的现代方法。

答案 1 :(得分:0)

谢谢,我已经改变了很多东西,我没有意识到我已经将它从getItem更改为Query。

我的问题始终存在的关键是函数调用是异步的,所以我没有耐心并让回调执行。

我是Node.js的新手,所以我试图弄清楚如何在Web服务调用上检查凭据,并且在我对请求者进行身份验证之前不要继续。在getItem调用上有没有办法使它同步?我意识到我可以在getItem回调中嵌入后面的逻辑,但我真的试图为每个端点使用相同的安全例程。

思想?