在javaScript中为batchWriteItem(params,function(){})创建请求参数

时间:2018-11-23 02:21:54

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

我一直在尝试为batchWriteItem()创建参数,当我像这样创建它们时,它确实起作用了。

var params = {
RequestItems: {
    'tableNameXYZ' :  [ //hardcoded
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz
        },...
       }
      },
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz1
        },...
       }
      }
  }
 ]
};

但是当变量中有表名时,我将无法对其进行处理:

var tableName = 'tableNameXYZ';
var params = {
RequestItems: {
    tableName :  [ 
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz
        },...
       }
      },
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz1
        },...
       }
      }
  }
 ]
};

显然,这是行不通的,因为我在这里对JSON对象进行了粗略的研究。 然后我尝试了这个:

var params = {};
params.RequestItems[tableName] = [
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz
        },...
       }
      },
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz1
        },...
       }
      }
  }
 ];

现在它给我抛出一个错误,如:

 TypeError: Cannot set property 'tableNameXYZ' of undefined
at exports.handler (/var/task/index.js:181:32)

有人可以指出我的错误吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

出现此错误的原因是:

var params = {};

创建一个没有属性的空对象(称为params),但是:

params.RequestItems[tableName] = [ // ...rest of code

尝试分配params.RequestItems.the-value-of-tableName

但是params没有名为RequestItems的属性,因此params.RequestItems是未定义的。尝试在TypeError上设置属性值(在本例中为the-value-of-tableName)是undefined

要解决此问题,请使用:

var params = {};
params.RequestItems = {}; // assign RequestItems an empty object.
params.RequestItems[tableName] = [ // ...rest of code.