AWS lambda TypeError: Cannot read property 'toString' of undefined
AWS lambda TypeError: Cannot read property 'toString' of undefined
我有一个 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 文件夹中安装的东西?
你有调用时传入的数据对象吗?在我看来 Body 没有定义,这就是为什么你不能调用 toString().
我有一个 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 文件夹中安装的东西?
你有调用时传入的数据对象吗?在我看来 Body 没有定义,这就是为什么你不能调用 toString().