我正在尝试在NodeJS中扫描到我的DynamoDB表,但我遇到了ExpressionAttributeValues的问题,因为我无法识别我在过滤器表达式中定义的占位符。我传递了一个带有我想要的信息的对象,但是发给我这个错误:
“意外密钥':在params.ExpressionAttributeValues ['atributeValues']中找到的值,”代码“:”意外参数“
我不知道发生了什么,因为如果我把对象的内容作为参数,它就能完美地工作,所以我被困住了。
function Consult(cb, Filter, Event){
var filterExpression = Filter+"= :Value";
if(typeof Event[Filter] == "string"){
//This is the object I'm trying to pass as parameter
var attributeValues = {
":Value" : {"S" : Event[Filter] }
}
}else {
//This is the object I'm trying to pass as parameter
var attributeValues = {
":Value" : {"N" : Event[Filter] }
}
}
dynamodb.scan({
TableName: tableName,
FilterExpression: filterExpression,
ExpressionAttributeValues:{ ":Value" : {"S" : Event[Filter] } } //This Works
ExpressionAttributeValues:{ attributeValues } //This don't and I don't know why
}, function(err, data){
if(err){
console.log(err);
cb(err, null);
} else {
cb(null, data.Items);
}
});
}
答案 0 :(得分:1)
请更改下面提到的代码。无需再次使用花括号包装attributeValues。
ExpressionAttributeValues: attributeValues
答案 1 :(得分:-1)
这不是一个直接的答案(我不能在评论中共享格式化代码),但建议如何调试:
var params = {};
params.TableName = tableName;
params.FilterExpression = filterExpression;
params.ExpressionAttributeValues = { attributeValues };
console.log(JSON.stringify(params));
dynamodb.scan(params, function(err, data){
....
}
console.log的输出将准确显示扫描的参数。您可以比较ExpressionAttributeValues的两个替代方案。这会给你一个关于错误的提示。