【问题标题】:AWS API Gateway with Lambda not seeing the body带有 Lambda 的 AWS API Gateway 看不到正文
【发布时间】:2021-07-03 17:17:20
【问题描述】:

我有一个 Lambda 函数,直接执行时效果很好。由于目前只是为了测试,它只读取请求body并返回其中一个孩子的值作为响应:

exports.handler = async (event) => {

    const response = {
        "isBase64Encoded": false,
        "headers": {
            "Content-Type": "application/json"
        },
        "statusCode": 200,
        "body": event.body.maxNumber
    };
    return response;
};

但是,当我使用 AWS Api 网关从中创建 Api 时,会发生奇怪的行为。如果 Lambda 函数包含上述代码,则响应正文为空。但是,如果我将响应更改为返回整个请求正文,而不是孩子(在这种情况下为 maxNumber),它确实会返回它。 无论如何,虽然 lambda 函数在孤立的情况下可以正常工作,但在 API 网关后面时,它似乎看不到请求正文的子项。

我已经创建了 HTTP 和 REST api,无论是否启用了代理,但没有运气。也找不到任何专门采样我的案例(请求正文)的文档。 任何帮助将不胜感激。

【问题讨论】:

  • 如果您使用 REST Api 和 Proxy,我们需要先解析它JSON.parse(event.body),因为输入正文将作为字符串发送到 lambda。然后访问它的属性。
  • 已经试过了。不是这样的:(
  • 为您的 api 网关启用 lambda-proxy,然后通过 JSON.parse(event.body) 获取正文
  • 我想类似的问题已经在这里回答了:stackoverflow.com/questions/41648467/…

标签: node.js amazon-web-services aws-lambda httprequest aws-api-gateway


【解决方案1】:

对于 api Gateway 代理响应,body 应该是字符串。

首先,您需要解析请求正文以获取 json 对象和内部响应,您需要对响应正文进行标记,如下所述:

const body = JSON.parse(event.body);

const response = {
        "isBase64Encoded": false,
        "headers": {
            "Content-Type": "application/json"
        },
        "statusCode": 200,
        "body": JSON.stringify(body.maxNumber)
    };
    return response;

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 2017-06-26
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多