AWS Lambda,测试按钮是做什么类型的请求?

Lol*_*pez 3 post json amazon-web-services aws-lambda

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);
};
Run Code Online (Sandbox Code Playgroud)

当我按下带有此内容的测试按钮时(是屏幕截图):

{
   "talk": "Hello World"
}
Run Code Online (Sandbox Code Playgroud)

我得到这个回应(是一个截图):

{
  "statusCode": 200,
  "headers": {
    "Content-Type": "application/json"
},
  "response": "Hello World"
}
Run Code Online (Sandbox Code Playgroud)

但是当我发出 POST 请求时(我添加了一个开放的 API 网关,请看这里),它只返回空数据,有时还会返回内部服务器错误(这里是屏幕截图):

no data
Run Code Online (Sandbox Code Playgroud)

如果我将 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);
};
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?为什么测试按钮的工作方式与 POST 请求不同?我希望两者都能工作,特别是测试,因为我想“调试”“无服务器”

Ift*_*ani 5

当您调用AWS lambda处理请求时,您在请求中传递了什么。

因此,当您需要event使用 body传递数据时,只需bodyeventObject 中添加参数即可。

{
 "body": "{\"talk\":\"Hello World\"}"
}
Run Code Online (Sandbox Code Playgroud)

笔记:

当您调用 lambda 时,POST请求对象包含body在事件中。