AWS API Lambda 网关看不到正文
AWS API Gateway with Lambda not seeing the body
我有一个 Lambda 函数,它在直接执行时工作得很好。由于目前只是为了测试,它只读取请求 body
和 returns 响应中 children 之一的值:
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 函数包含上述代码,则响应主体为空。但是,如果我将响应更改为 return 整个请求主体,而不是 child(在本例中为 maxNumber
),它会执行 return。
无论如何,虽然 lambda 函数单独运行良好,但在 API 网关后面时,它似乎看不到请求主体的 children。
我创建了 HTTP 和 REST api,启用和不启用代理,但没有成功。也找不到任何专门抽样像我的案例(请求正文)的文档。
任何帮助将不胜感激。
对于 api 网关代理响应,正文应为字符串。
首先,您需要解析请求主体以获取 json 对象,在响应内部,您需要按如下所述对响应主体进行 strigify:
const body = JSON.parse(event.body);
const response = {
"isBase64Encoded": false,
"headers": {
"Content-Type": "application/json"
},
"statusCode": 200,
"body": JSON.stringify(body.maxNumber)
};
return response;
我有一个 Lambda 函数,它在直接执行时工作得很好。由于目前只是为了测试,它只读取请求 body
和 returns 响应中 children 之一的值:
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 函数包含上述代码,则响应主体为空。但是,如果我将响应更改为 return 整个请求主体,而不是 child(在本例中为 maxNumber
),它会执行 return。
无论如何,虽然 lambda 函数单独运行良好,但在 API 网关后面时,它似乎看不到请求主体的 children。
我创建了 HTTP 和 REST api,启用和不启用代理,但没有成功。也找不到任何专门抽样像我的案例(请求正文)的文档。 任何帮助将不胜感激。
对于 api 网关代理响应,正文应为字符串。
首先,您需要解析请求主体以获取 json 对象,在响应内部,您需要按如下所述对响应主体进行 strigify:
const body = JSON.parse(event.body);
const response = {
"isBase64Encoded": false,
"headers": {
"Content-Type": "application/json"
},
"statusCode": 200,
"body": JSON.stringify(body.maxNumber)
};
return response;