0

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

  • 任务 1. 在目录“root/uploaded_csv”内的服务器上上传和保存 CSV。
  • 任务 2. 借助第 2 列 CSV 中提到的电子邮件,读取和处理 CSV 数据以在数据库中搜索用户。
  • 任务 3. 在 AWS s3 服务器上保存导入的 CSV 文件。

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

4

1 回答 1

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. 上传 CSV 文件并将其保存在“root/XXX”目录中的服务器上。

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. 将导入的 CSV 文件保存在 AWS s3 服务器上。

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);
                }
            });
});
于 2018-05-17T07:33:38.060 回答