node.js - 无法在 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"] 等,在所有情况下我都得到“未定义”。谢谢。
解决方案
身体已经串起来了。您只需调用JSON.parse(record.body)
即可将字符串解析为有效的 JSON。请注意,这可能会引发错误。
推荐阅读
- angular - 在配置文件“tsconfig.json”中找不到输入。指定的“包含”路径在 Angular 6 中
- javascript - 在赛普拉斯测试中,增量功能不起作用,每次都需要增加数字?
- javascript - React-Native:Native-base:失败的道具类型:提供给“View”的无效 props.style 键“NativeBase”
- c# - iText.Layout.Document 忽略合并 pdf 占用的空间
- c - 无延迟使用蜂鸣器[C] STM32
- jenkins - 为使用 jenkinsci kubernetes-plugin 创建的 jenkins slave 配置 Kubernetes cpu 内存请求和限制
- react-apollo - 访问 InMemoryCache 中 dataIdFromObject 内部的查询变量?
- amazon-web-services - 解决方案栈具体版本后如何从elasticbeanstalk获取最新的解决方案栈?
- python - 当列表大小不是某个值的倍数时,我应该引发什么错误?
- cmake - CMAKE:使用 ld(设置 CMAKE_CXX_LINK_EXECUTABLE)作为链接器的“-rdynamic”问题