收到 AWS SNS 多个通知

AWS SNS Multiple notifications received

我有一个 API 网关方法调用 Lambda Node.js 函数。 Lambda 函数调用 SNS 并将 APNS 通知发布到我的 iPhone。当我在 AWS 控制台中调用 API 网关或 Lambda 函数时,我按预期收到一条通知。当 运行 命令行上的 Lambda 代码(Grunt 和 Node.js)时,我也会收到一条通知。当 运行 来自 eclipse 的 javascript 时,我也会收到一条通知。

但是,当我 POST 到 API 网关时,我收到 2-5 条通知。每件事看起来都一样。我检查了 Cloudwatch 日志,似乎每次只发送一个请求。有人知道如何调试吗?

我有过类似的经历。对我来说,是我没有正确调用成功回调。

我明白了。我的函数在 exports.handler 函数之外:

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);

};

每次我调用 API 网关并调用我的 Lambda 函数时,numSent 变量都会递增。我想将我的函数放在 exports.handler 中可以确保我的函数不是全局函数或其他东西。