AWS lambda TypeError:无法读取未定义的属性'toString'

AWS lambda TypeError:无法读取未定义的属性'toString'

问题描述:

我有一个nodejs lambda函数,其中的代码包含toString()函数我们通常用来将某些东西转换为字符串值。AWS lambda TypeError:无法读取未定义的属性'toString'

当我在AWS拉姆达的控制台直接写代码的作品完美,但是当我上传使用S3存储相同的功能,它抛出下面的错误

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 

功能代码:

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

在上面的代码行var connectionString = data.Body.toString();将收到的数据转换为字符串,但toString()不起作用。 如何克服这个错误,我错过了什么安装在node_module文件夹?

+0

我认为我们需要您的代码来帮助您。 – hellomichibye

+0

@hellomichibye我编辑了代码的问题。 – user4045063

+2

你有调用时传入的数据对象吗?对我来说,它看起来像身体没有定义,这就是为什么你不能调用toString()。 –

你有调用时传入的数据对象吗?对我来说,它看起来像身体没有定义,这就是为什么你不能调用toString()。