首页 > 解决方案 > API Gateway 配置以接收正确的 POST 正文为 JSON

问题描述

我正在努力让 Lambda + API 网关正常工作。

这是我的代码-

exports.handler = async (event) => {
    console.log("EVENT -> ", event.body)
    let buff = new Buffer(event.body, 'base64');
    let text = buff.toString('UTF-8');
    console.log("TEXT -> ",text)
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

我已经提到了这个答案,但是,我Integration Request在 API Gateway 中看不到。

这里

必须做什么才能获得正确的 JSON?我知道我可以使用 3rd 方 npm 库。但是,我更喜欢在 AWS 端进行一些修复。我只想使用event.body应该返回 JSON 的。

标签: amazon-web-servicesrestaws-lambdaaws-api-gateway

解决方案


我会以我理解的方式重新解释你的问题。

1/ 您创建了一个连接到 API 网关的 Lambda 函数

2/ 您使用 API 网关向 Lambda 函数发送了一些数据

3/ API 网关用一些数据调用你的函数

4/ 您在 Lambda 函数中收到的数据既不会丢失也不会损坏。它以 Base64 编码格式在 Lambda 内部接收

5/您不想在 Lambda 中接收 Base64 编码的数据,您不想像以前那样进行解码步骤

let buff = new Buffer(event.body, 'base64');
let text = buff.toString('UTF-8');

如果是这种情况,您需要查看此 https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html

首先,检查您的请求发送的 Content-Type 标头。

然后,看看你发给 API 网关的数据是不是真的是文本数据

此外,转到您的 API Gateway -> Setting -> Binary Media Types 以查看 API 网关是否专门将任何数据类型视为二进制


推荐阅读