amazon-web-services - aws api 网关和 lamda - 如何获取 event.body
问题描述
我是 aws 新手,在我的 lamda 处理程序函数中获取事件主体时遇到了一个奇怪的问题。
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: event.body
};
return response;
};
当我运行测试时,我得到
Response:
{
"statusCode": 200
}
但是,当我只返回事件时
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: event <=====
};
return response;
};
我明白了
Response:
{
"statusCode": 200,
"body": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
我正在使用节点 8.10。有人知道我在这里做错了什么吗?
解决方案
Lambda 控制台中的测试事件正是您event
在 Lambda 处理程序中作为参数获得的内容。当你投入时{"a":1}
,你得到{"a":1}
。
您可以从组合框中选择模板来模拟不同事件类型的 AWS 服务(SNS、S3、API 网关)。
当您返回 HTTP 响应时,您可能希望模拟 API Gateway 事件,它可能如下所示:
{
"body": "{\"a\":1}",
"pathParameters": {
"id": "XXX"
},
"resource": "/myres",
"path": "/myres",
"httpMethod": "GET",
"isBase64Encoded": true,
"requestContext": {
"authorizer": {
"tenantId": "TEST"
},
"accountId": "123456789012",
"resourceId": "123456",
"stage": "test",
"requestId": "test-request-id",
"requestTime": "09/Apr/2015:12:34:56 +0000",
"requestTimeEpoch": 1428582896000,
"path": "/myres",
"resourcePath": "/myres,
"httpMethod": "GET",
"apiId": "1234567890",
"protocol": "HTTP/1.1"
}
}
然后您将获取正文event.body
作为 JSON 字符串 - 您可以将其转换为对象JSON.parse(event.body)
。
返回时,您必须使用以下命令序列化响应正文JSON.stringify
:
return {
statusCode: 200,
body: JSON.stingify({your:'object'})
};
推荐阅读
- java - 并行运行多个 HystrixCommand 的最佳方式
- codeigniter-3 - 使用 Morris Bar 无法显示
- c++ - 如何解析 libcurl 在 IMAP 上的响应?
- javascript - HLS 代理和 CORS
- excel - VBA:空字典中的“Comparemode”错误
- pip - pkg_resources.DistributionNotFound:未找到“Sphinx==1.8.5”分布,应用程序需要该分布
- asp.net-core - Entity FrameWorkCore 一对多外键关系
- css - CSS 中的这段代码将背景图像堆叠在一起。为什么?
- tkinter - tkinter 画布矩形使用项目配置调整大小
- istio - Istio Kiali 中的未知服务是什么?