我在lambda代理集成中使用Node.js 8.10。 我的目标很简单。
但是我在步骤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\"}"
}
但是我与邮递员发送了相同的json数据。但是我只有这个。
{ “消息”:“你好” }
没有“ key1”。所以我添加了console.log,然后在cloudwatch中检查了日志。
{ message: 'hello', key1: undefined }
我可以看到aws编辑器日志很好,但是当我用邮递员发送数据时。 lambda无法解析我的json数据。这意味着lambda无法解析事件参数。
我的问题是: 1.当我尝试这样解析
var body = JSON.parse(event)"
为什么lambda编辑器会发出错误?有什么不对?这是非常简单且非常通用的代码。
如何解析json数据并返回未定义的正确值。我期望这个回应
{消息:“ hello”,键1:“ value1”}
我已经尝试解决了3天。但我真的不知道请帮帮我。
答案 0 :(得分:1)
来自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;
};
这会做到的。
答案 1 :(得分:1)
您需要将 postman 中的参数作为 JSON 传递。
在正文选项卡中选择“原始”选项,然后从组合框中选择“JSON”类型: 然后只需输入:
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
并在您的 lambda 函数中像这样访问它:
JSON.parse(event.body).key1