2016-07-22 14 views
0

Ich habe eine Nodejs Lambda-Funktion, in der der Code besteht toString() -Funktion, was wir im Allgemeinen verwenden, um etwas in String-Wert zu konvertieren.AWS Lambda TypeError: Kann die Eigenschaft 'toString' von undefined nicht lesen

wenn ich schreibe den Code direkt in der Konsole von AWS Lambda seine funktioniert perfekt, aber wenn ich die gleiche Funktion mit S3-Bucket laden wirft es die folgenden Fehler

TypeError: Cannot read property 'toString' of undefined 
at Response.<anonymous> (/var/task/GetAssetMobile3.js:46:40) 
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:355:18) 
at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20) 
at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10) 
at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:615:14) 
at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10) 
at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12) 
at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10 
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9) 
at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:617:12 

Funktionscode:

"use strict"; 

var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 
var lambda = new AWS.Lambda(); 
var pg = require('pg'); 
console.log('Loading function'); 
exports.handler = function(event, context, callback) { 

var userName=event.headers.username; 
var passWord=event.headers.password; 
var partybranchid ="event.body.FieldValue"; 
var modifiedon="event.body.ModifiedON"; 
var RES; 
var params = { 
     FunctionName: 'ServiceAuthentication', 
     InvocationType: 'RequestResponse', 
     LogType: 'Tail', 
     Payload: '{ "userName": "'+userName+'","passWord": "'+passWord+'" }' 
}; 
lambda.invoke(params, function(err, data) { 
    if (err) { 
     context.fail(err); 
     console.log("Response is not received error in login invoking function "); 
    } else { 
     var response=data.Payload; 
     var auth=response.replace('"true"','true'); 
     if(auth === 'true'){ 
      console.log("authentication is true continue process"); 
      s3.getObject({ 
       Bucket: 'awslambdaoregon', 
       Key: 'DBURL.txt' 
       }, function (err, data) { 
        if(err){ 
         console.log('calling s3 DBURL file failed '); 
        } 
       }); 
      var connectionString=data.Body.toString();  
      var client = new pg.Client(connectionString); 
      client.connect(function(err) { 
      if(err) { 
        console.log(err); 
       }else{ 
      var Query ='select * from masset where partybranchid='+partybranchid+'; 

      console.log('executing query',Query); 
      client.query(Query, function(err, result) { 

      if(err){ 
       console.log('Error in executing Query'); 
       client.end(); 
      } else { 
    console.log(' executing Query successful'); 
       } 
      } 
      });} 
      }); 

     }else{ 
      RES = '{"ResponseJSON":{"Body":{"Datalist":{"Authentication":'+response+'}}}}'; 
     } 
    callback(null, JSON.parse(RES)); 
    } 
    }); 
}; 

In der obigen Codezeile var connectionString = data.Body.toString(); konvertieren die empfangenen Daten in Zeichenfolge, aber die toString() funktioniert nicht. Wie überwinde ich diesen Fehler? Fehle ich etwas, um es im Ordner node_module zu installieren?

+0

Ich denke, wir brauchen Ihren Code, um Ihnen zu helfen. – hellomichibye

+0

@hellomichibye Ich habe die Frage mit Code bearbeitet. – user4045063

+2

Haben Sie das Datenobjekt, das beim Aufruf übergeben wird? Für mich sieht es aus wie Körper ist nicht definiert, und deshalb können Sie toString() nicht aufrufen. –

Antwort

0

Haben Sie das Datenobjekt, das beim Aufruf übergeben wird? Für mich sieht es aus wie Körper ist nicht definiert, und deshalb können Sie toString() nicht aufrufen.