【问题标题】:KeyConditionExpression error and empty error responseKeyConditionExpression 错误和空错误响应
【发布时间】:2015-10-20 22:53:39
【问题描述】:

我使用 Lambda 作为我的后端,并从中执行所有 DynamoDB 操作。

我有一个用户表Users,我想通过它的哈希键Username查询它

在我的 params 变量上使用 KeyConditionExpression 语句,但出现以下错误:

有 2 个验证错误:\n* MissingRequiredParameter: Missing >params 中的必需键 'KeyConditions'\n* UnexpectedParameter: Unexpected >在参数中找到键 '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 没有任何意义,正如文档所说。

【问题讨论】:

  • 您能否显示您正在执行的产生错误的实际查询?
  • var userQuery = { TableName:"Users", KeyConditionExpression:"Username = :username", ExpressionAttributeValues:{ ":username":"some_username", } };
  • 我使用 legacy 语句让它工作并将顶部声明更改为: var aws = require('aws-sdk'); var 发电机 = 新 aws.DynamoDB(); .我不想使用旧的符号,所以我会留下这个问题

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 2021-04-25
      相关资源
      最近更新 更多