AWS Lambda尝试将event.body写入Aurora DB会引发错误

时间:2017-05-22 06:13:44

标签: amazon-web-services lambda aws-api-gateway amazon-rds-aurora

我在Aurora DB中有一个表。我正在尝试AWS API Gateway,AWS Lambda和AWS Aurora DB。

我创建了一个Lambda函数,它接收来自API Gateway的请求并触发处理函数,但它不会将event.body写入表。

exports.insertBill = function(event, context, callback) {


     context.callbackWaitsForEmptyEventLoop = false;

     console.log(event.body);

     var query = rDBConnection.query('INSERT INTO Bill SET ?', event.body, function(err, result) {
        if (err) {
           callback(null, {"statusCode": 400, "body": JSON.stringify(err)});

        } else {
        var recordId = result.insertId;
         console.log("Record ID " + recordId);
         var result = {recordId};
         callback(null, {"statusCode": 200, "body": JSON.stringify(result)});
       }
      });



  }

代码确实连接到DB。当我尝试如下设置主体时(来自Lambda测试界面)

  "body": "{\n     \"vendor_Id\" : 101,\n  \"user_Id\"  :  2224\n  \n }",

它确实将主体显示为(来自console.log):

{
     "vendor_Id" : 101,
  "user_Id"  :  2224

 }

但抛出SQL错误:

{
  "statusCode": 400,
  "body": "{\"code\":\"ER_PARSE_ERROR\",\"errno\":1064,\"sqlState\":\"42000\",\"index\":0}"
}

当我在rDBConnection.query中尝试像{ "vendor_Id" : 101, "user_Id" : 2224 }这样的硬编码值而不是event.body - >在这种情况下,代码会写入DB记录。

我不确定我在这里缺少什么。从API网关测试界面进行测试时,我收到了类似的结果。

1 个答案:

答案 0 :(得分:0)

我发现了。 API网关将body作为JSON字符串发送给Lambda,因此我在写入数据库之前在body上执行了JSON.parse。

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format