让知识连接你我
投稿赚钱
当前位置: 首页 > 前端开发 > 使用archiver在nodejs下打包
  • 101
  • 微信分享

    扫一扫,在手机上查看

使用archiver在nodejs下打包

2019.09.12 10:00 245 浏览 举报

  刚在cms软件系统上填加了一个备份数据的功能,都是自身随性瞎写的,都没有规化,率性而为,鼓捣了一整天,功能可以说做到了,关键功能是手动对数据库系统完成备份数据并形成压缩文件,自然也包括管控功能,例如删除备份数据。接下来根据讲述改功能了解一下nodejs的archiver组件。

  虽然原生的nodejs 早已内置了gzip (zlib)缩小,刚开始也试着过,较为简单,做到方式 给出:

  var zlib = require("zlib");
  var gzip = zlib.createGzip();
  var fs = require("fs");
  var inp = fs.createReadStream("test.txt");
  var out = fs.createWriteStream("test.txt.gz");
  // 压缩管道
  inp.pipe(gzip).pipe(out);

  基础和官网上编码相同,构建读文件流 —— 构建压缩文件流 , 根据缩小管道形成压缩文件。 可是试着后察觉gzip只对单独文件合理,针对根目录是都没有郊果的,自然,根据更进一步的处置将会还可以做到郊果,都没有试着。google了一下,找到啦一个较为适宜的组件archiver,做到方式 也较为简单。

  archiver是一个在nodejs里能跨平台做到打包功能的模块,可以打zip和tar包,是一个相对比较功能强大的三方功能模块。

  应用前先安装archiver功能模块。

  npm install archiver

  做到数据库备份编码:

  var fs = require('fs');
  var child = require('child_process');
  var archiver = require('archiver');
  backUpData : function(res,req){  // 数据备份
      var date = new Date();
      //        var ms = Date.parse(date);
      var ms = moment(date).format('YYYYMMDDHHmmss').toString();
      var dataPath = Settings.DATABACKFORDER + ms;
      var cmdstr = 'mongodump -o "'+dataPath+'"';
      //        var cmdstr = 'mongodump -u '+Settings.USERNAME+' -p '+Settings.PASSWORD+' -d '+Settings.DB+' -o "'+dataPath+'"';
      var batPath = Settings.DATAOPERATION + '/backupData.bat';
  if(!fs.existsSync(Settings.DATABACKFORDER)){
      fs.mkdirSync(Settings.DATABACKFORDER);
  }
  if (fs.existsSync(dataPath)) {
      console.log('已经创建过备份了');
  } else {
      fs.mkdir(dataPath,0777,function(err1){
      if (err1) throw err1;
  if( fs.existsSync(batPath) ) {
      //写入文件
  fs.writeFile(batPath,cmdstr,function (err2) {
  if(err2){
      console.log(err2)
  }
  else{
      console.log("----文件写入成功-----")
      var exec = child.exec;
      exec('call "'+batPath,
  function (error, stdout, stderr) {
  if (error !== null) {
      //console.log('exec error: ' + error);
  }else{
      console.log('备份成功');
      //                                    生成压缩文件
      var output = fs.createWriteStream(Settings.DATABACKFORDER + ms +'.zip');
      var archive = archiver('zip');
  archive.on('error', function(err){
      throw err;
  });
      archive.pipe(output);
      archive.bulk([
      { src: [dataPath+'/**']}
  ]);
      archive.finalize();
      //                                     操作记录入库
  var optLog = new DataOptionLog();
  optLog.logs = "数据备份";
  optLog.path = dataPath;
  optLog.fileName = ms +'.zip';
  optLog.save(function(err3){
      if (err3) throw err3;
          res.end("success");
          })
      }
  });
  }
  }) ;
  }
  })
  }
  }

  做到根目录缩小编码:

  //                                    生成压缩文件
  var output = fs.createWriteStream(Settings.DATABACKFORDER + ms +'.zip');
  var archive = archiver('zip');
  archive.on('error', function(err){
      throw err;
  });
  archive.pipe(output);
  archive.bulk([
      { src: [dataPath+'/**']}
  ]);
  archive.finalize();

  做到思路: 1、根据nodeJs的子进度 require('child_process') 的exec 方式 实行 bat文件

  2、bat动态载入实行脚本,脚本中动态定义数据表备份数据夹(依照备份数据时间形成时间为文件夹名称)

  3、实行脚本 mongodump -o "E:/mongodata/20150624082952" ,即mongodb内置的备份数据脚本

  4、备份数据

  5、将备份数据夹缩小到特定文件目录下。


本文首次发布于开创者素材 ,转载请注明出处,谢谢合作!

相关文章推荐