【问题标题】:Getting data from Angular factory invoking AWS Lambda into controller从调用 AWS Lambda 的 Angular 工厂获取数据到控制器中
【发布时间】:2016-10-06 12:44:06
【问题描述】:

我是 Angular 和 Node 的新手,最近也在玩 AWS。我喜欢无服务器计算的概念,因此正在尝试编写一个 AngularJS 应用程序,该应用程序将调用 AWS Lambda 上托管的 Node.JS 微服务。

我已经通过 Angular 工厂调用了我的 Lambda 函数并获得了成功的响应。在调用 lambda.invoke() 方法后,我可以将我在 Lambda 函数中定义的 Lambda 有效负载从 Angular 工厂内输出到控制台,但我无法将数据输入控制器以实际使用它。我只是得到一个“未定义”的错误。

我已经在这个网站和其他网站上阅读了几个小时,而我对 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

      }    

]);

【问题讨论】:

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


    【解决方案1】:

    我和你有同样的问题。请找到我的解决方案

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

    【讨论】:

    • 谢谢 - 刚刚意识到这已经得到了答案 - 我使用 $scope.apply() 来解决我的问题。当我有机会了解它的工作原理时,我会按照您的建议进行尝试。
    猜你喜欢
    • 2015-03-25
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多