AWS Lambda新手在这里。 我正在使用AWS Lambda函数进行一些测试,但有些事情对我来说不正确。 鉴于此lambda函数:
exports.handler = async (event, context, callback) => {
var response = {
statusCode: 200,
headers: {'Content-Type': 'application/json'},
response: event.talk
};
callback(null, response);
};
当我按test button的内容时(here是屏幕截图):
{
"talk": "Hello World"
}
我收到此回复(here是屏幕截图):
{
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"response": "Hello World"
}
但是当我发出POST请求(我添加了一个开放的API网关,看到它here)时,它只会返回空数据,有时还会返回内部服务器错误(here是屏幕截图):>
no data
如果我将Lambda函数修改为JSON解析正文,它将起作用
exports.handler = async (event, context, callback) => {
var body = JSON.parse(event.body);
var talk = body.talk;
var response = {
statusCode: 200,
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(talk)
};
callback(null, response);
};
这是怎么回事?为什么测试按钮与POST请求的工作方式不同?我希望两者都能正常工作,尤其是测试,因为我想“调试”“无服务器”
答案 0 :(得分:1)
当您调用 AWS lambda 处理请求时,您将在请求中传递什么。
因此,当您需要在
event
中使用正文传递数据时,只需在body
对象中添加event
参数。
{
"body": "{\"talk\":\"Hello World\"}"
}
注意:
当您从
POST
调用lambda时,请求事件中的对象包含body
。
答案 1 :(得分:0)
测试按钮将仅通过提供的事件来运行您的lambda,但是当您通过API网关代理运行它时,您会获得不同格式的事件。至于为什么解析event.body时它起作用,是因为event.body将包含通过API发送的消息。
最好的做法是:
console.log(JSON.stringify(event));
并查看传入的事件格式。