我有一个API方法调用Lambda Node.js函数。Lambda函数调用SNS并向我的iPhone发布APNS通知。当我在AWS控制台中调用API网关或Lambda函数时,我得到一个预期的通知。在命令行(Grunt和Node.js)上运行Lambda代码时,我还会收到一个通知。在运行eclipse的javascript时,我还会收到一个通知。
然而,当我发布到API网关时,我会收到2-5个通知。每件事看起来都一样。我检查了Cloudwatch日志,每次只发送一个请求。有人知道怎么调试这个吗?
发布于 2016-05-14 01:11:26
我想通了。我的函数位于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中可以确保我的函数不是全局的或者其他什么的。
发布于 2016-05-14 00:59:25
我也有过类似的经历。对我来说,这是因为我没有正确地调用成功的回调。
https://stackoverflow.com/questions/37176290
复制相似问题