Node.js 当我通过AWS控制台和Curl在Lambda中测试无服务器代码时会得到不同的结果
我遵循了以下教程:。它指导您构建一个Lambda函数,该函数接受三个参数,并使用从这些参数构建的项填充DynamoDB数据库 当我使用CURL从控制台运行东西时,一切都按预期进行。但是,如果我通过Lambda控制台进行测试,我会得到一个错误,这似乎是由于处理程序参数中的“event”对象根据调用Lambda函数的位置的不同而形状不同(这很奇怪) 我测试了以下内容:Node.js 当我通过AWS控制台和Curl在Lambda中测试无服务器代码时会得到不同的结果,node.js,amazon-web-services,serverless,Node.js,Amazon Web Services,Serverless,我遵循了以下教程:。它指导您构建一个Lambda函数,该函数接受三个参数,并使用从这些参数构建的项填充DynamoDB数据库 当我使用CURL从控制台运行东西时,一切都按预期进行。但是,如果我通过Lambda控制台进行测试,我会得到一个错误,这似乎是由于处理程序参数中的“event”对象根据调用Lambda函数的位置的不同而形状不同(这很奇怪) 我测试了以下内容: module.exports.submit = async (event, context) => { return {
module.exports.submit = async (event, context) => {
return {
statusCode: 200,
body: Object.keys(event).join()
}
}
使用CURL时,我得到以下声明(个人详细信息来自教程):
这个CURL语句的响应相当长
资源、路径、httpMethod、标头、多值标头、queryStringParameters、多值queryStringParameters、pathParameters、stageVariables、requestContext、正文、isBase64Encoded
另一方面,在控制台中,响应很简单:
名字、电子邮件、经历
出于测试目的,我应该忽略控制台还是遗漏了什么?当使用curl或Postman调用端点时,它会向API网关发送HTTP请求。API网关然后创建一个特定的事件对象并将其传递给Lambda函数。在控制台中直接调用Lambda时,传递手动创建的任何事件对象。直接测试Lambda函数的方法是以一个API网关事件为例,修改它以适合您要测试的内容。当使用HTTP请求调用时,您可以通过从Lambda注销事件对象来完成此操作。当您通过
curl
进行测试时,它将通过API网关,向事件
对象添加许多内容。当您直接在Lambda控制台中进行测试时,您可能没有在您创建的测试事件对象中传递所有这些API网关值,因此存在差异。
curl -H "Content-Type: application/json" -X POST -d '{"fullname":"Shekhar Gulati","email": "shekhargulati84@gmail.com", "experience":12}' https://__.execute-api.eu-west-2.amazonaws.com/dev/__