我是Angular和Node的新手,最近也在玩AWS。我喜欢无服务器计算的概念,因此我尝试编写一个AngularJS应用程序,它将调用AWS Lambda上托管的Node.JS微服务。
我已经通过Angular工厂调用我的Lambda函数并获得成功的响应。我可以在调用lambda.invoke()方法后从Angular工厂中将我在Lambda函数中定义的Lambda有效负载输出到控制台,但是我无法将数据输入到我的控制器中以实际使用它。我只是得到一个“未定义”错误。
我在这个网站上和其他人一直在阅读它几个小时,而我对Angular缺乏经验使得我很难通过自己工作,所以任何帮助都会受到赞赏。我觉得答案必须是这方面的一些变化(angular controller is executing before factory complete).......但我无法让它运作
工厂如下:
my.factory("AWSbits", function() {
var params = {
FunctionName: 'arn:aws:lambda:eu-west-1:xyz',
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify ( {
".....some stuff"
}),
};
var lambda = new AWS.Lambda();
return{
lambdaexecute : function(){
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else {
console.log(data); // successful response
if (data.Payload != '{}') {
jdata = JSON.parse(data.Payload);
return jdata;
}
}
})}};
);
控制器是:
my.controller('AWSController', [
'$scope',
'AWSbits',
function($scope, AWSbits){
$scope.output = AWSbits.lambdaexecute();
console.log($scope.output); ====> undefined
}
]);
答案 0 :(得分:0)
我和你一样有同样的问题。请找我的解决方案
Service.js
app.service('Lambda', function() {
AWS.config.update({accessKeyId: 'accessKeyId here', secretAccessKey: 'secretAccessKey here'});
AWS.config.region = 'us-west-1';
AWS.config.apiVersions = {
lambda: '2015-03-31',
// other service API versions
};
var lambda = new AWS.Lambda();
return {
LambdaAPI: function (params,callback) {
return lambda.invoke(params,callback);
}
}
});
控制器
app.controller('abcController', function($scope,Lambda) {
var params = {
FunctionName: 'function-name-here', /* required */
Payload:'{"userId": "1","email": "abc@gmail.com"}'
};
Lambda.LambdaAPI(params,function(err, data){
if (err) console.log(err, err.stack); // an error occurred
console.log(data);
})