如何使用nodejs和hapi@8.8.1

时间:2018-05-17 07:08:41

标签: node.js mongodb hapijs import-csv

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

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

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

1 个答案:

答案 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);
                }
            });
});