【发布时间】:2017-03-14 16:16:27
【问题描述】:
我正在尝试使用 AWS Lambda 托管的 Node JS 解析来自 S3 的 CSV 文件。我试过同时使用fast-csv 和csv-parser npm。但是,我的两种解决方案都会导致 Error: write after end 导致的 Lambda 函数失败。感谢您的帮助。
编辑:我在处理程序中声明流变量。更新了代码。
// dependencies
const csv = require('fast-csv');
const parse = require('csv-parser')
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
const uuidv4 = require('uuid/v4');
exports.handler = (event, context, callback) => {
// read S3 object stream
var s3Stream = s3.getObject(params, (err, data) => {
if (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
callback(message);
} else {
console.log('CONTENT TYPE:', data.ContentType);
callback(null, data.ContentType);
}
}).createReadStream();
// read CSV with fast-csv
// options for fast-csv npm
var options = {
headers:true,
escape:'\\',
trim:true,
};
csv.fromStream(s3Stream, options).on("data", function(data) {
data.id = uuidv4();
data.createDate = new Date().toISOString();
console.log(data);
}).on("error", function(data) {
console.error("Got an error: " + data);
}).on("end", function() {
console.log("Done reading.");
});
// read CSV with csv-parser
var otherOptions = {
columns : true,
auto_parse : true,
escape : '\\',
trim : true,
};
var parser = parse(otherOptions);
parser.on('data', function(data) {
data.id = uuidv4();
data.createDate = new Date().toISOString();
console.log(data);
})
.on('end',function(data) {
//do something wiht csvData
console.log(data);
});
s3Stream.pipe(parser);
};
【问题讨论】:
-
这看起来可能已经被回答了?看看:stackoverflow.com/questions/33578998/….
标签: node.js csv npm aws-lambda