【问题标题】:How to upload and process csv file with nodejs and hapi@8.8.1如何使用nodejs和hapi@8.8.1上传和处理csv文件
【发布时间】:2018-05-17 07:08:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: node.js mongodb hapijs import-csv


    【解决方案1】:

    步骤 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);
                    }
                });
    });
    

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2021-07-12
      • 2012-06-11
      • 2021-07-19
      相关资源
      最近更新 更多