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

Posted

技术标签:

【中文标题】从调用 AWS Lambda 的 Angular 工厂获取数据到控制器中【英文标题】:Getting data from Angular factory invoking AWS Lambda into controller 【发布时间】: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

          

]);

【问题讨论】:

【参考方案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() 来解决我的问题。当我有机会了解它的工作原理时,我会按照您的建议进行尝试。

以上是关于从调用 AWS Lambda 的 Angular 工厂获取数据到控制器中的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?

在 Angular 11 中,如何通过 API Gateway 将应用程序/json HTTP POST 到 AWS Lambda?

AWS Appsync 从 Lambda 调用变异?

在 API Gateway 中使用 AWS Lambda 授权方

如何从 lambda 调用 IAM 授权的 AWS ApiGateway 端点?

从 Lambda 调用 AWS AppSync graphql API