KeyConditionExpression错误和空错误响应

时间:2015-07-29 19:17:30

标签: node.js amazon-dynamodb aws-lambda

我使用Lambda作为我的后端,并且即时执行所有DynamoDB操作。

我有一个用户表Users,我想通过其哈希键Username

查询它

在我的params变量上使用KeyConditionExpression语句,但是我收到以下错误:

  

有2个验证错误:\ n * MissingRequiredParameter:缺少> params中所需的键'KeyConditions'\ n * UnexpectedParameter:在params中找到意外>键'KeyConditionExpression'

所以是的,我尝试了以下遗留声明:

var userQuery = {
 TableName:"Users",
 KeyConditions:{
     Username:{
          ComparisonOperator:'EQ',
          AttributeValueList:[{S:"some_username"}]
     }
 }
};

出于某种原因,我在查询回调中得到空错误,如下所示:

dynamo.query(userQuery,function(err,data){
  if(err) console.log("error "+JSON.stringify(err,null,2));
  else console.log("pass "+JSON.stringify(data,null,2));
});

我已经尝试了所有的东西,已经到了绝望的地步......

我似乎无法查询任何表,但我可以扫描并使用putItem没有问题。我的策略也有查询参数。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "my_Stmt_num",
        "Action": [
            "dynamodb:DeleteItem",
            "dynamodb:GetItem",
            "dynamodb:PutItem",
            "dynamodb:Query",
            "dynamodb:Scan",
            "dynamodb:UpdateItem"
        ],
        "Effect": "Allow",
        "Resource": "*"
    },
    {
        "Sid": "",
        "Resource": "*",
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Effect": "Allow"
    }
]
}

如果它是相关的,在我的处理程序js文件的顶部我得到这样的发电机的引用:

var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB();

我的整个申请都是'新',意味着在2015年2月之前没有任何内容存在,所以我没有看到使用遗留api的任何意义,正如文档所说。

2 个答案:

答案 0 :(得分:1)

听起来您与文档客户端关联的AWS开发工具包可能已过期,并且不支持新的KeyConditionExpression功能。您能否尝试重新安装AWS SDK和文档SDK?如果重新安装后仍有问题,请附上正在安装的版本。

答案 1 :(得分:0)

以前的DynamoDB Document SDK已被弃用,从现在开始应使用标准Javascript SDK中的新客户端:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html