如何用nodejs和hapi@8.8.1上传处理csv文件

How to upload and process csv file with nodejs and hapi@8.8.1

我开始使用现有项目,该项目是使用 Hapi 的旧版本 (hapi@8.8.1) 构建的,服务器上的节点版本也较旧。我的任务是上传包含用户电子邮件地址的 CSV 文件,我需要借助 CSV 文件中提供的电子邮件来处理用户数据。
任务列表如下:-

由于我正在处理旧节点和 hapi 的版本,在那个阶段我什至无法更新所有版本和依赖项。

第 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 步。读取和处理 CSV 数据以在第 2 列的 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);
                }
            });
});