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

Fai*_*hah 1 javascript amazon-web-services node.js amazon-dynamodb aws-lambda

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

var tableName = event.tableName.toString();
Run Code Online (Sandbox Code Playgroud)

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

2018-11-20T21:09:31.532Z 928e237c-ed08-11e8-a312-539d290e67fc {"errorMessage":"请求的资源未找到","errorType":"ResourceNotFoundException","stackTracextract":["Request. 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-539d290e67fc73c28RequestId ed08-11e8-a312-539d290e67fc 持续时间:124.41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB41 ms 计费持续时间:200 ms 内存大小:1024 MB 已用最大内存:33 MB41 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
        }
    }
     }
   }
]
Run Code Online (Sandbox Code Playgroud)

} };

pii*_*ly3 6

我认为您的 json 不正确。当您定义 RequestItems 对象时

RequestItems: { tableName: [...] }
Run Code Online (Sandbox Code Playgroud)

您实际上是将字符串“tableName”硬编码为属性,而不是称为“tableName”的变量。这就是为什么没有所谓的表。

es6 的解决方案是这样做:

RequestItems: { [tableName]: [...] }
Run Code Online (Sandbox Code Playgroud)

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

var RequestItems = {};
RequestItems[tableName] = [...];
Run Code Online (Sandbox Code Playgroud)

请参阅如何从变量设置 JS 对象属性名称以供参考

编辑:

要获得更完整的解决方案,请尝试:

var params = {};
params.RequestItems = {};
params.RequestItems[tableName] = [...]
Run Code Online (Sandbox Code Playgroud)