我在 lambda 代理集成中使用 Node.js 8.10。 我的目标很简单。
- 将 json 数据发送到 lambda 函数
- 使用json数据查询rds并从rds中检索数据
- 从 rds 数据返回 lambda 中包含 json 数据的响应。
但我在步骤 1 中遇到了问题。我试图找出答案,并向 AWS 支持中心询问。这没有帮助。请帮助我。
我的测试 json 数据是:
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
我的代码很简单,但有一个问题:
exports.handler = async (event) => {
var body = JSON.parse(event)//<--this is a problem
let responseBody = {
message: "hello",
key1: body.key1
};
const response = {
statusCode: 200,
headers : {"Access-Control-Allow-Origin" : "*"},
body: JSON.stringify(responseBody)
};
return response;
};
我在第二行遇到了这个错误。
{"errorMessage":"Unexpected token o in JSON at position 1","errorType":"SyntaxError","stackTrace":["JSON.parse (<anonymous>)","exports.handler (/var/task/index.js:2:21)"]}
所以我像这样更改了第二行代码。
var body = JSON.parse(JSON.stringify(event))
然后我得到了很好的回应。我认为效果很好。
{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
},
"body": "{\"message\":\"hello\",\"key1\":\"value1\"}"
}
但我确实用 postman 发送了相同的 json 数据。但我只得到这个。
{ “消息”:“你好” }
没有“key1”。所以我添加了console.log,然后检查了cloudwatch中的日志。
{ message: 'hello', key1: undefined }
我可以看到 aws 编辑器日志很好,但是当我使用 postman 发送数据时。 lambda 无法解析我的 json 数据。这意味着 lambda 无法解析事件参数。
我的问题是: 1.当我尝试像这样解析时
var body = JSON.parse(event)"
为什么 lambda 编辑器会出现错误?有什么不对?这是 super 简单且非常常见的代码。
如何解析我的 json 数据并返回正确的值而不是未定义的。我期待这个回应
{ message: '你好', key1: 'value1' }
我已经尝试解决这个问题三天了。但我真的不知道。请帮帮我。
最佳答案
来自 API Gateway 的正文是字符串化的 JSON,因此您需要对其进行解析,然后访问所需的属性。
'use strict';
exports.handler = async (event) => {
let responseBody = {
message: "hello",
key1: JSON.parse(event.body).key1
};
const response = {
statusCode: 200,
headers: { "Access-Control-Allow-Origin": "*" },
body: JSON.stringify(responseBody)
};
return response;
};
这样就可以了。
关于node.js - 如何解析 lambda 中的事件参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54988235/