我是AWS,JavaScript的初学者,我正在尝试使用AWS Lambda函数中的以下代码从oracle数据库中获取数据。
let conn = await this.getConnection(userName, password, connectString);
let results = await conn.execute(query, {}, {});
let data = results.rows.map(el => `${el}`);
console.log(data);
这在控制台上提供了以下输出
[ "TEST_SESSION_0,121,High,Warning,7",
"TEST_SESSION_2,122,High,Error,11",
"TEST_SESSION_3,123,Low,Error,431,
"TEST_SESSION_4, ASMT_,103,Low,Fatal,10" ]
现在,我的目标是将该输出转换为CSV数据流,然后上传到S3存储桶对象output.csv中以进行进一步处理。我在下面尝试转换成 CSV,但是在使用AWS开发工具包和必需的NPM模块将其连接回S3时遇到问题,当我测试以下代码时,我没有收到任何错误,但同时没有看到 数据上传到S3。不确定我在哪里做错了,不胜感激。
stringify(results.rows, function(err, output){
if(err){
console.log('some error occured '+ err);
} else {
console.log(output); //gives me below output
//TEST_SESSION_0,121,High,Warning,7
//TEST_SESSION_2,122,High,Error,11
//TEST_SESSION_3,123,Low,Error,431
//TEST_SESSION_4, ASMT_,103,Low,Fatal,10
下面的代码是将CSV输出上传到S3对象
var param = {
Bucket: 'Test-Bucket',
Key: 'output.csv',
Body: new Buffer(fs.createWriteStream(output)) //can i pass the csv data that i captured above in "output"?
};
s3bucket.putObject(param, function(err, output){
if(err) console.log(err);
else console.log(output);
});
}
})
答案 0 :(得分:0)
我将首先分离出S3上传的代码,然后单独处理该部分-尝试使其在存储桶中创建一个文件,其中包含来自字符串的文本。
putObject
函数期望将Buffer
作为Body
参数。要从字符串构造此字符串,可以使用Buffer.from
方法:
var AWS = require('aws-sdk');
var output = 'This is a test';
var myBody = Buffer.from(output);
var param = {
Bucket: 'Test-Bucket',
Key: 'output.csv',
Body: myBody
};
var s3bucket = new AWS.S3({ signatureVersion: 'v2' });
s3bucket.putObject(param, function(err, output) {
if(err) {
console.error(err);
} else {
console.log(output)
}
});
一旦该部分正常工作,请将其插入其他代码并将output
更改为CSV文件的内容。
NB ,您需要设置以下环境变量: