我开始使用现有项目,该项目使用Hapi的旧版本(hapi@8.8.1)构建,节点版本在服务器上也较旧。我有一个上传CSV文件的任务,其中包括用户的电子邮件地址,我需要借助CSV文件中提供的电子邮件处理用户数据。
任务列表如下: -
由于我正在处理旧节点和hapi的版本,并且在那个阶段我甚至无法更新所有版本和依赖项。
答案 0 :(得分:0)
步骤1.接收CSV作为API参数,如下所示
payload: {
maxBytes: 20715200,
output: 'stream',
parse: true,
allow: 'multipart/form-data'
},
步骤2.验证导入的CSV文件,如下所示:
validate: {
importedCsv: Joi.any()
.meta({swaggerType: 'file'})
.required()
.allow('')
.description('CSV file')
},
步骤3.在服务器上的“root / XXX”目录中上传和保存CSV。
csvFileName = ""+moment().utc().format('XXXX-XX-XX')+".csv";
csvFilePath = Path.resolve(".") + "/XXX/" + csvFileName ;
var file = fs.createWriteStream(csvFilePath);
file.on('error', function (err) {
console.log(err.message);
});
payload.importedCsv.pipe(file);
payload.importedCsv.on('end', function (err) {
if(err){
cb(ERROR);
}else{
cb(null);
}
});
步骤4.使用第2栏中CSV中提到的电子邮件的帮助,读取和处理CSV数据以搜索数据库中的用户。
var obj = csv();
obj.from.path(csvFilePath).to.array(function (data) {
async.forEach(data, function (item, callback){
/** Data processing and query part **/
console.log(item[1]); /* will print email from the second cloumn in the CSV */
}, function(err) {
cb(null);
});
});
步骤5.在AWS s3服务器上保存导入的CSV文件。
fs.readFile(csvFilePath, function (error, fileBuffer) {
var accessKeyId = XXXXXX;
var secretAccessKeyId = XXXXXX;
AWS.config.update({accessKeyId: accessKeyId, secretAccessKey: secretAccessKeyId});
var s3bucket = new AWS.S3();
var params = {
Bucket: XXXXXXX,
Key: 'XXX' + '/' + csvFileName,
Body: fileBuffer,
ACL: 'public-read',
ContentType: payload.importedCsv.hapi.headers['content-type']
};
s3bucket.putObject(params, function (err, data) {
if (err) {
// cb(ERROR);
}else{
// cb(null);
}
});
});