为什么无服务器中的本地事件变量表现不同?
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 事件会根据发送者的不同而变化,例如:
- 数据库事件(AWS DynamoDB Event)
- 队列事件(AWS SQS Event)
- API 事件 (AWS API Gateway Event)
- Events sent form other Lambda functions
- Many more...
您可以使用 serverless invoke local
或 aws lambda invoke
在本地模拟任何这些事件,并将本地 json 有效负载传递给函数当前正在做,但是如果您通过 AWS API Gateway endpoint, your function will receive it as a API Gateway Event.
发送相同的数据
了解所有事件类型并防止错误的最简单方法是使用 @types/aws-lambda 模块。
您好,我正在使用无服务器框架来测试 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 事件会根据发送者的不同而变化,例如:
- 数据库事件(AWS DynamoDB Event)
- 队列事件(AWS SQS Event)
- API 事件 (AWS API Gateway Event)
- Events sent form other Lambda functions
- Many more...
您可以使用 serverless invoke local
或 aws lambda invoke
在本地模拟任何这些事件,并将本地 json 有效负载传递给函数当前正在做,但是如果您通过 AWS API Gateway endpoint, your function will receive it as a API Gateway Event.
了解所有事件类型并防止错误的最简单方法是使用 @types/aws-lambda 模块。