DynamoDB batchwriteItem不会将数据放入Lambda函数中的动态TableName中

时间:2018-11-20 21:11:05

标签: javascript node.js amazon-web-services aws-lambda amazon-dynamodb

我正在尝试将数据写入不同的表,表名通过get请求传递。

var tableName = event.tableName.toString();

当我编写硬编码的tableName时,它工作正常,但是当我编写变量Name时,它将引发错误。

2018-11-20T21:09:31.532Z 928e237c-ed08-11e8-a312-539d290e67fc {“ errorMessage”:“找不到请求的资源”,“ errorType”:“ ResourceNotFoundException”,“ stackTrace”:[“请求。 extractError(/var/runtime/node_modules/aws-sdk/lib/protocol/json.js:48:27)","Request.callListeners(/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105 :20)“,” Request.emit(/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)","Request.emit(/ var / runtime / node_modules / aws-sdk / lib /request.js:683:14)","Request.transition(/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)","AcceptorStateMachine.runTo(/ var / runtime / node_modules /aws-sdk/lib/state_machine.js:14:12)","/"var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10“,”请求。(/ var / runtime / node_modules /aws-sdk/lib/request.js:38:9)“,”请求。(/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)","Request.callListeners(/ var / runtime / node_modules / aws-sdk / lib / sequential_executor.js:115:18)“]} END RequestId:928e237c-ed08-11e8-a312-539d290e67fc REPORT RequestId:928e237c-ed08-11e8-a312-539d290e67fc持续时间:124.41 ms计费持续时间:200 ms内存大小:1024 MB使用的最大内存:33 MB

代码如下:

var params = {
RequestItems: {
    tableName :  [
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": r1index
        },
         "DateandTime" :{
          "S": DnT1  
        } ,
        "roadId" :{
          "N": id
        },
        "x1_axis":{
           "S": x11
        },
        "y1_axis":{
            "S":  y11
        },
        "z1_axis":{
            "S": z11
        },
        "x2_axis":{
           "S": x21
        },
        "y2_axis":{
            "S":  y21
        },
        "z2_axis":{
            "S": z21
        },
        "latitude":{
            "S": lat1
        },
        "longitude":{
            "S":lng1
        }
    }
     }
   },
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": r2index
        },
        "DateandTime" :{
          "S": DnT2 
      } ,
        "roadId" :{
          "N": id
        },
        "x1_axis":{
           "S": x12
        },

        "y1_axis":{
            "S":  y12
        },
        "z1_axis":{
            "S": z12
        },
        "x2_axis":{
           "S": x22
        },
        "y2_axis":{
            "S":  y22
        },
        "z2_axis":{
            "S": z22
        },
        "latitude":{
            "S": lat2
        },
        "longitude":{
            "S":lng2
        }
    }
     }
   },
          {
     PutRequest: {
       "Item" : {
        "indexNumber":{
            "N": r3index
        },
        "DateandTime" :{
          "S": DnT3  
        } ,
         "roadId" :{
          "N": id
        },
        "x1_axis":{
           "S": x13
        },
        "y1_axis":{
            "S":  y13
        },
        "z1_axis":{
            "S": z13
        },
        "x2_axis":{
           "S": x23
        },
        "y2_axis":{
            "S":  y23
        },
        "z2_axis":{
            "S": z23
        },
        "latitude":{
            "S": lat3
        },
        "longitude":{
            "S":lng3
        }
    }
     }
   }
]

}     };

1 个答案:

答案 0 :(得分:1)

我认为您的json不正确。定义

之类的RequestItems对象时
RequestItems: { tableName: [...] }

您实际上是在硬编码字符串“ tableName”作为属性,而不是硬编码为“ tableName”的变量。这就是为什么没有这样的表的原因。

es6解决方案是这样做:

RequestItems: { [tableName]: [...] }

老式的解决方案是这样做:

var RequestItems = {};
RequestItems[tableName] = [...];

请参见How To Set A JS object property name from a variable以供参考

编辑:

有关更完整的解决方案,请尝试:

var params = {};
params.RequestItems = {};
params.RequestItems[tableName] = [...]