首页 > 解决方案 > 无法在 Lambda node.js 函数中解析来自 SQS 的 JSON 响应

问题描述

我正在尝试使用 API Gateway 和 SQS 通过 Webhook 将一些数据获取到 lambda 函数中。此 Webhook 包含 JSON 有效负载和提供上下文的 HTTP 标头。由于无法使用映射模板中的“Action=SendMessage”将这些 webhook HTTP 标头从 API Gateway 获取到 SQS(如果我的假设错误,请纠正我...我已在方法请求和集成请求中尝试过 http 标头),我已在 API Gateway 映射模板中包含来自 webhook 的标头,如下所示:

Action=SendMessage&MessageGroupId=$input.params('MessageGroupId')&
MessageBody={
"Header1":"$input.params('Header1 key')",
"body":"$input.json('$')"
}

我在 Lambda 函数中的代码如下:

'use strict';

exports.handler = async function(event, context) {

if (event.Records) {
    event.Records.forEach(record => {
      var rec = JSON.parse(JSON.stringify(record.body));
      console.log("Record body: " + rec);

      console.log("Header1: " + rec.Header1);
      
  });
  }  
  return {};
  
};

CloudWatch 日志中“rec”的值相当长,但这里是简化版本:

Record body: {
"Header1":" OYqmDnuUpDs8oF1RwoBnJywBY6c1I4qLklU=",
"body":"{"id":820982911946154508,"email":"jon@doe.ca","closed_at":null,"created_at":"2020-11-30T20:25:43-05:00","updated_at":"2020-11-30T20:25:43-05:00","number":234,"note":null,"token":"123456abcd","gateway":null,"test":true,"total_price":"7.00","subtotal_price":"-3.00"
}

我的问题-如何读取 Header1 和 body 的值?我已经尝试过 rec.Header1、rec[0].Header1 和 rec["Header1"] 等,在所有情况下我都得到“未定义”。谢谢。

标签: node.jsamazon-web-servicesaws-lambdaaws-api-gatewayamazon-sqs

解决方案


身体已经串起来了。您只需调用JSON.parse(record.body)即可将字符串解析为有效的 JSON。请注意,这可能会引发错误。


推荐阅读