DynamoDB扫描,ExpressionAttributeValues意外密钥NodeJS中的错误

时间:2016-09-14 01:08:15

标签: node.js amazon-dynamodb

我正在尝试在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);
      }
  });
}

2 个答案:

答案 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的两个替代方案。这会给你一个关于错误的提示。