2016-05-12 10 views
0

私はAPI GatewayメソッドでLambda Node.js関数を呼び出しています。ラムダ関数はSNSを呼び出して、iPhoneにAPNS通知を送信します。 AWSコンソールでAPIゲートウェイまたはラムダ関数を呼び出すと、期待通りに1つの通知が得られます。また、コマンドライン(GruntとNode.js)でラムダコードを実行するときに通知を受け取ります。私はまた、Eclipseからjavascriptを実行するときに1つの通知を取得します。AWS SNS複数の通知を受け取りました

しかし、私がAPIゲートウェイにPOSTすると、私は2-5の通知を受け取ります。すべてのものが同じように見えます。私はCloudwatchのログをチェックしたが、毎回1つのリクエストしか送信されないようだ。誰もこれをデバッグする方法を知っていますか?

+0

「POST」とはどういう意味ですか? – Yangfan

答えて

0

私はそれを理解しました。私はexports.handler機能の外に私の機能を持っていた:私は、APIゲートウェイと呼ばれ、私のラムダ関数を呼び出した

var AWS = require('aws-sdk'); 
var sns = new AWS.SNS(); 

var myAlerter = function(){ 

    var numSent = 0; 
    var callback; 
    var arn = "arn:aws:sns:us-west-2:45435475457:endpoint/APNS/MyAlerter/5a11c61f-1122-3344-5566-656845463"; 

    var sendNotification = function(messageText){ 

      var apns = { 
        aps : { 
         alert : messageText, 
         sound : 'default' 
        } 
      }; 
      var message = { 
        "APNS" : JSON.stringify(apns) 
      }; 
      message = JSON.stringify(message); 

      var params = { 
        Message: message, 
        MessageStructure: 'json', 
        TargetArn: arn 
      }; 

      numSent++; 
      sns.publish(params, function(err, data){ 
       if (err){ 
        callback(err, err.stack); 
       }else { 
        var result = { 
          error: false, 
          numSent : numSent, 
          data: data 
        };    

        callback(false,result); 
       } 
      });    
    }; 

    return { 

     alert : function(message, cb){ 
      callback = cb; 
      sendNotification(message); 
     } 

    } 

}(); 

exports.handler = function(event, context){ 

    var alertedCallback = function(error, data){ 
     if (error){ 
      context.done(error); 
     } else { 
      context.succeed(data); 
     } 
    };   

    myAlerter.alert(event.message, alertedCallback); 

}; 

毎回、numSent変数がインクリメントでしょう。私はexports.handlerの中に自分の関数を置くと、私の関数がグローバルなものか何かではないことが保証されたと思います。

0

私は似ています。私にとっては、成功コールバックを適切に呼び出すことができなかったことでした。

関連する問題