i'm new angular , node , have been playing aws recently. concept of serverless computing attempting write angularjs app invoke node.js microservices hosted on aws lambda.
i've got far invoking lambda function through angular factory , getting successful response. can output lambda payload i've defined in lambda function console within angular factory after calling lambda.invoke() method, can't data controller use it. "undefined" error.
i've been reading around hours, on site , others , inexperience angular making hard work through myself, appreciated. feel answer must variation on (angular controller executing before factory complete) .......but can't working
the factory below:
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); // error occurred else { console.log(data); // successful response if (data.payload != '{}') { jdata = json.parse(data.payload); return jdata; } } })}}; );
the controller is:
my.controller('awscontroller', [ '$scope', 'awsbits', function($scope, awsbits){ $scope.output = awsbits.lambdaexecute(); console.log($scope.output); ====> undefined } ]);
i have same issue you.please find solutions
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); } } });
controller
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); // error occurred console.log(data); })