【问题标题】:AWS lambda TypeError: Cannot read property 'toString' of undefinedAWS lambda TypeError:无法读取未定义的属性“toString”
【发布时间】:2017-01-25 21:53:04
【问题描述】:

我有一个 nodejs lambda 函数,其中的代码由我们通常用来将某些内容转换为字符串值的 toString() 函数组成。

当我直接在 AWS lambda 的控制台中编写代码时,它工作得很好,但是当我使用 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 文件夹中安装的内容?

【问题讨论】:

  • 我认为我们需要您的代码来帮助您。
  • @hellomichibye 我已经用代码编辑了这个问题。
  • 你有调用时传入的数据对象吗?在我看来,Body 似乎没有定义,这就是为什么你不能调用 toString()。
  • 嗨@j-u-s-t-i-n 你是对的,我对代码进行了一些更改并消除了这个错误,谢谢。
  • @user4045063 太棒了!我将其发布为答案,以便您关闭问题。

标签: node.js amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

你有调用时传入的数据对象吗?在我看来,Body 似乎没有定义,这就是你不能调用 toString() 的原因。

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多