从Angular工厂获取数据,将AWS Lambda调用到控制器中

时间:2016-06-06 19:27:03

标签: javascript angularjs factory aws-sdk aws-lambda

我是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

      }    

]);

1 个答案:

答案 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);
    })