【发布时间】: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