Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js可以';t处理sns事件消息内容_Javascript_Node.js_Aws Lambda_Amazon Sns - Fatal编程技术网

Javascript 节点js可以';t处理sns事件消息内容

Javascript 节点js可以';t处理sns事件消息内容,javascript,node.js,aws-lambda,amazon-sns,Javascript,Node.js,Aws Lambda,Amazon Sns,我正试图从节点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.lo

我正试图从节点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日志中得到的:

从SNS收到的消息: { “事件”: [ {“事件时间戳”:“2018-03-16T10:51:22Z”}, {“事件时间戳”:“2018-03-16T10:51:22Z”} ], “EventDocVersion”:“2014-08-15” }

TypeError:无法读取未定义的属性“forEach” 在exports.handler

为什么我无法在事件中解析消息对象内部的“事件”?

尝试消息[“事件”].forEach而不是message。事件可能会起作用,并且可以使用来检查weather属性是否存在。实际上message.Events如果您在控制台中获得与前面提到的相同的对象,则应该可以起作用,但至少可以通过检查属性来避免错误。 ----编辑--if(message&&message.hasOwnProperty('Events'))

我认为您收到的消息是空白的,请先尝试打印,因为我在浏览器中尝试了以下操作,但工作正常:

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")})
尝试message[“Events”]。forEach而不是message。事件可能会起作用,并使用检查weather属性是否存在。实际上message.Events如果您在控制台中获得与前面提到的相同的对象,则应该可以起作用,但至少可以通过检查属性来避免错误。 ----编辑--if(message&&message.hasOwnProperty('Events'))

我认为您收到的消息是空白的,请先尝试打印,因为我在浏览器中尝试了以下操作,但工作正常:

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 => { .....

在我解决这个问题后工作:

var message = event.Records[0].Sns.Message;

var msgJson = JSON.parse(message);

msgJson["Events"].forEach(element => { .....

因为
message.Events
未定义。我理解这一点。但为什么我不能解析消息中的事件。这是我的问题您是否尝试了控制台日志记录
消息
,以查看是否有名为
事件
的属性?你如何调用你的函数?@Dan是的。我这样做了:var message=event.Records[0].Sns.message;log('从SNS接收的消息:',消息);您可以看到console.log结果有问题。它给出:从SNS收到的消息:{“事件”:[{“EventTimestamp”:“2018-03-16T10:51:22Z”},{“EventTimestamp”:“2018-03-16T10:51:22Z”}],“EventDocVersion”:“2014-08-15”}不可能,您需要确保代码中没有任何其他部分为该变量指定不同的值。因为
message.Events
未定义。我理解这一点。但为什么我不能解析消息中的事件。这是我的问题您是否尝试了控制台日志记录
消息
,以查看是否有名为
事件
的属性?你如何调用你的函数?@Dan是的。我这样做了:var message=event.Records[0].Sns.message;log('从SNS接收的消息:',消息);您可以看到console.log结果有问题。它给出:从SNS收到的消息:{“Events”:[{“EventTimestamp”:“2018-03-16T10:51:22Z”},{“EventTimestamp”:“2018-03-16T10:51:22Z”}],“EventDocVersion”:“2014-08-15”}是不可能的,您需要确保代码中没有任何其他部分为该变量分配不同的值。同样的问题,这对我也有效。谢谢你的发帖!同样的问题,这对我有效。谢谢你的发帖!