node js无法处理sns事件消息内容
node js can't process sns event message content
我正在尝试从节点 js lambda 项目中的 SNS 事件中的消息中获取内容
这里是处理消息的代码
exports.handler = (event, context, callback) => {
var message = event.Records[0].Sns.Message;
console.log('Message received from SNS:', message);
message.Events.forEach(element => {
console.log(element);
});
};
示例事件:
{
"Records":
[
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "",
"Sns":
{
"Type": "Notification",
"MessageId": "bc86f105-c320",
"TopicArn": "arn:aws:sns:ewerwrewrw",
"Subject": "dwqweq23234",
"Message":
{
"Events":
[
{"EventTimestamp":"2018-03-16T10:51:22Z"},
{"EventTimestamp":"2018-03-16T10:51:22Z"}
],
"EventDocVersion":"2014-08-15"
},
"Timestamp": "2018-03-16T10:51:22.691Z",
"SignatureVersion": "1",
"Signature": "",
"SigningCertUrl": "",
"UnsubscribeUrl": "",
"MessageAttributes": {}
}
}
]
}
这是我在 CloudWatch 日志中得到的:
Message received from SNS:
{
"Events":
[
{"EventTimestamp":"2018-03-16T10:51:22Z"},
{"EventTimestamp":"2018-03-16T10:51:22Z"}
],
"EventDocVersion":"2014-08-15"
}
TypeError: Cannot read property 'forEach' of undefined
at exports.handler
为什么我无法在事件中解析 'Events' 内部消息对象?
尝试 message["Events"].forEach 而不是 message.Events 可能会工作并检查天气 属性 存在 using.Actually message.Events 如果您在控制台中获得与您提到的相同的对象,这应该有效,但您至少可以通过检查 属性 来避免错误。
----编辑----if(message && message.hasOwnProperty('Events'))
if(message && message.hasOwnProperty('Events')){
message.Events.forEach(element => {
console.log(element);
});
}
我认为您收到的消息是空白的,请先尝试打印它,因为我在下面的浏览器中尝试正常工作:
var obj={
"Records":
[
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "",
"Sns":
{
"Type": "Notification",
"MessageId": "bc86f105-c320",
"TopicArn": "arn:aws:sns:ewerwrewrw",
"Subject": "dwqweq23234",
"Message":
{
"Events":
[
{"EventTimestamp":"2018-03-16T10:51:22Z"},
{"EventTimestamp":"2018-03-16T10:51:22Z"}
],
"EventDocVersion":"2014-08-15"
},
"Timestamp": "2018-03-16T10:51:22.691Z",
"SignatureVersion": "1",
"Signature": "",
"SigningCertUrl": "",
"UnsubscribeUrl": "",
"MessageAttributes": {}
}
}
]
};
var fun1 = function(event, context, callback){
var message = event.Records[0].Sns.Message;
console.log('Message received from SNS:', message);
console.log("starting")
message["Events"].forEach(element => {
console.log(element);
});
};
fun1(obj,'',function(){console.log("uu")})
在我修复后工作:
var message = event.Records[0].Sns.Message;
var msgJson = JSON.parse(message);
msgJson["Events"].forEach(element => { .....
我正在尝试从节点 js lambda 项目中的 SNS 事件中的消息中获取内容
这里是处理消息的代码
exports.handler = (event, context, callback) => {
var message = event.Records[0].Sns.Message;
console.log('Message received from SNS:', message);
message.Events.forEach(element => {
console.log(element);
});
};
示例事件:
{
"Records":
[
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "",
"Sns":
{
"Type": "Notification",
"MessageId": "bc86f105-c320",
"TopicArn": "arn:aws:sns:ewerwrewrw",
"Subject": "dwqweq23234",
"Message":
{
"Events":
[
{"EventTimestamp":"2018-03-16T10:51:22Z"},
{"EventTimestamp":"2018-03-16T10:51:22Z"}
],
"EventDocVersion":"2014-08-15"
},
"Timestamp": "2018-03-16T10:51:22.691Z",
"SignatureVersion": "1",
"Signature": "",
"SigningCertUrl": "",
"UnsubscribeUrl": "",
"MessageAttributes": {}
}
}
]
}
这是我在 CloudWatch 日志中得到的:
Message received from SNS: { "Events": [ {"EventTimestamp":"2018-03-16T10:51:22Z"}, {"EventTimestamp":"2018-03-16T10:51:22Z"} ], "EventDocVersion":"2014-08-15" }
TypeError: Cannot read property 'forEach' of undefined at exports.handler
为什么我无法在事件中解析 'Events' 内部消息对象?
尝试 message["Events"].forEach 而不是 message.Events 可能会工作并检查天气 属性 存在 using.Actually message.Events 如果您在控制台中获得与您提到的相同的对象,这应该有效,但您至少可以通过检查 属性 来避免错误。 ----编辑----if(message && message.hasOwnProperty('Events'))
if(message && message.hasOwnProperty('Events')){
message.Events.forEach(element => {
console.log(element);
});
}
我认为您收到的消息是空白的,请先尝试打印它,因为我在下面的浏览器中尝试正常工作:
var obj={
"Records":
[
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "",
"Sns":
{
"Type": "Notification",
"MessageId": "bc86f105-c320",
"TopicArn": "arn:aws:sns:ewerwrewrw",
"Subject": "dwqweq23234",
"Message":
{
"Events":
[
{"EventTimestamp":"2018-03-16T10:51:22Z"},
{"EventTimestamp":"2018-03-16T10:51:22Z"}
],
"EventDocVersion":"2014-08-15"
},
"Timestamp": "2018-03-16T10:51:22.691Z",
"SignatureVersion": "1",
"Signature": "",
"SigningCertUrl": "",
"UnsubscribeUrl": "",
"MessageAttributes": {}
}
}
]
};
var fun1 = function(event, context, callback){
var message = event.Records[0].Sns.Message;
console.log('Message received from SNS:', message);
console.log("starting")
message["Events"].forEach(element => {
console.log(element);
});
};
fun1(obj,'',function(){console.log("uu")})
在我修复后工作:
var message = event.Records[0].Sns.Message;
var msgJson = JSON.parse(message);
msgJson["Events"].forEach(element => { .....