为什么无服务器中的本地事件变量表现不同?

Why does the local event variable in serverless behave differently?

您好,我正在使用无服务器框架来测试 lambda 函数。我有以下代码

module.exports.send = async (event, context, callback) => {
  console.log("event", event);
}

当我使用 serverless invoke local -f send -p mocked_data.txt

使用以下模拟数据在本地调用此函数时

其中 mocked_data.txt

{"name":"asfa","email":"test@test.com","content":"asadgdsgsdgsdagsdagsd"}

变量事件填充了上面已经解析的确切数据

但是,如果我从邮递员对那个端点执行POST,我会进入事件变量

event {
  resource: '/email/send',
  path: '/email/send',
  httpMethod: 'POST',
  headers: {
  // removed for brevity
  ,
    domainName: 'xxxxx.us-east-1.amazonaws.com',
    apiId: 'xxxxx'
  },
  body: '{\n' +
    '    "name": "asfa",\n' +
    '    "email": "test@test.com",\n' +
    '    "content": "asadgdsgsdgsdagsdagsd"\n' +
    '}',
  isBase64Encoded: false
}

为什么会这样?它导致我的端点出现一些问题。

注意:如果需要,我可以提供更多信息

发生这种情况是因为 AWS Lambda 事件会根据发送者的不同而变化,例如:

您可以使用 serverless invoke localaws lambda invoke 在本地模拟任何这些事件,并将本地 json 有效负载传递给函数当前正在做,但是如果您通过 AWS API Gateway endpoint, your function will receive it as a API Gateway Event.

发送相同的数据

了解所有事件类型并防止错误的最简单方法是使用 @types/aws-lambda 模块。