首页 > 解决方案 > 邮递员调用 AWS API Gateway 以触发 AWS lambda 函数不起作用

问题描述

我创建了一个 api,当被调用时,会触发用 nodejs 编写的 lambda 函数,以获取 json(对象数组)并将数据插入 dynamodb。对于数组中的每个对象,该函数都会创建一个 PutRequest 对象,并在完成后调用 batchWriteItem 函数。当我在 aws 控制台中测试时,一切正常,但是当我在邮递员中尝试时,我收到 500 错误。我知道来自邮递员和控制台的事件是不同的,如果你想访问 json,你应该引用“event.body”但是当我这样做时,我收到 event.body.ForEach 的错误:“不能在控制台中读取未定义的属性 'forEach' 和邮递员中的 500 错误。下面是在控制台中工作的代码

var dynamo = new AWS.DynamoDB({region: 'us-east-1',});

exports.handler = (event, context, callback) => {

  const done = (err, res) => callback(null, {
        statusCode: err ? '400' : '200',
        body: err ? err.message : res,

    });

  var params = {
      RequestItems: {
        "Lead": []
      }
  }

    event.forEach(x => {

      params.RequestItems.Lead.push({
        PutRequest: {
          Item: {
            "Address": {S: x.Address},
            "City": {S: x.City},
            "State": {S: x.State},
            "Zipcode": {S: x.Zipcode},
            "Owner_First_Name": {S: x.Owner_First_Name},
            "Owner_Last_Name": {S: x.Owner_Last_Name}
          }
        }
      })
    })

    dynamo.batchWriteItem(params, done);

};

标签: node.jsaws-lambdaamazon-dynamodbpostmanaws-api-gateway

解决方案


当 lambda 从 api 网关接收到 json 主体时,它将作为 json 字符串传递。

要将 json 字符串转换为 json,您需要解析 event.body。

const body = JSON.parse(event.body)

然后你可以做body.forEach

希望这可以帮助


推荐阅读