Как загрузить и обработать CSV-файл с помощью nodejs и hapi@8.8.1 - PullRequest
0 голосов
/ 17 мая 2018

Я начал работать с существующим проектом, который построен на более старой версии Hapi (hapi@8.8.1), а версия узла также старше на сервере. И у меня есть задача загрузить файл CSV, который включает в себя адрес электронной почты пользователей, и мне нужно обрабатывать данные пользователей с помощью электронной почты, предоставленной в файле CSV.
Список заданий следующий: -

  • Задача 1. Загрузить и сохранить CSV на сервере внутри каталога "Корень / uploaded_csv".
  • Задание 2. Считывание и обработка данных CSV для поиска пользователей в базе данных. с помощью электронной почты, указанной в CSV в столбце 2.
  • Задача 3. Сохранение импортированного файла CSV на сервере AWS s3.

Поскольку я имею дело со старыми версиями узлов и хапи, и на этом этапе я даже не могу обновить все версии и зависимости.

1 Ответ

0 голосов
/ 17 мая 2018

Шаг 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. Чтение и обработка данных CSV для поиска пользователей в базе данных с помощью электронной почты, упомянутой в CSV в столбце 2.

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);
                }
            });
});
...