Node.js提取SNS JSON对象Trigger属性报TypeError问题问询
报错原因
你遇到的报错由两个核心问题导致:
- AWS SNS事件里的
Sns.Message字段默认是JSON字符串格式,不是直接可访问属性的JS对象,你没有做JSON解析就直接读取Trigger属性,此时sns.Trigger为undefined,尝试读取undefined的Namespace属性就触发了该TypeError。 - 即便完成JSON解析,你打印的
sns结构里Trigger.Dimensions是数组类型,不能直接通过.value读取属性,需要先取下标对应的数组元素。
修复方案
首先对Sns.Message做JSON解析,再按结构读取对应属性即可,参考代码如下:
// 第一步:将SNS Message字符串转为JS对象 const sns = JSON.parse(event.Records[0].Sns.Message); // 第二步:按结构读取属性,注意Dimensions是数组,取第一个元素的value const sns_NameSpace = sns.Trigger.Namespace; const sns_ApiId = sns.Trigger.Dimensions[0].value; const sns_MetricName = sns.Trigger.MetricName; console.log(sns_ApiId + '_' + sns_MetricName) console.log(sns_NameSpace)
如果存在Dimensions数组有多个元素的场景,可以按名称过滤目标维度,避免下标取值不准确的问题:
const sns_ApiId = sns.Trigger.Dimensions.find(item => item.name === 'ApiId')?.value;
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

