如何解析Lambda中的事件参数?

时间:2019-03-04 17:11:36

标签: node.js lambda aws-lambda

我在lambda代理集成中使用Node.js 8.10。 我的目标很简单。

  1. 将json数据发送到lambda函数
  2. 使用json数据查询rds并从rds中检索数据
  3. 从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\"}"
}

但是我与邮递员发送了相同的json数据。但是我只有这个。

{     “消息”:“你好” }

没有“ key1”。所以我添加了console.log,然后在cloudwatch中检查了日志。

{ message: 'hello', key1: undefined }

我可以看到aws编辑器日志很好,但是当我用邮递员发送数据时。 lambda无法解析我的json数据。这意味着lambda无法解析事件参数。

我的问题是: 1.当我尝试这样解析

var body = JSON.parse(event)"

为什么lambda编辑器会发出错误?有什么不对?这是非常简单且非常通用的代码。

  1. 如何解析json数据并返回未定义的正确值。我期望这个回应

    {消息:“ hello”,键1:“ value1”}

我已经尝试解决了3天。但我真的不知道请帮帮我。

2 个答案:

答案 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