2013-08-17 2 views
-1

привета я пытался распаковать файл из моего диска C и пытаюсь разобрать на JavaScript Object здесь кодраспаковать файл и разобрать его Js

var AdmZip = require('adm-zip'); 
var fs = require('fs'), xml2js = require('xml2js'); 
var parser = new xml2js.Parser(); 
var paramdata = 'c:/sample/kusuma.zip'; 
console.log(paramdata); 
var zip = new AdmZip(paramdata); 
var zipEntries = zip.getEntries(); 
var obj = []; 
var count = 0; 
zipEntries.forEach(function(zipEntry) { 
    var len = zipEntries.length; 
    console.log(zipEntry.toString()); 
    console.log(zipEntry.entryName); 
    fs.readFile("", function(err, data) { 
     console.log(data); 
     parser.parseString(data, function(err, result) { 
      count++; 
      console.log(count); 
      obj.push(result); 

      if (count === len) { 
       console.log(obj); 
       res.send(obj); 
      } 

     }); 
    }); 

}); 

пожалуйста, проверьте код один раз и предоставить мне еще несколько примеров

ответ

0

Ну, fs.readFile() для чтения файлов, которые сами находятся непосредственно на диске, а это не так.

Однако, adm-zip уже читает содержание .zip, поэтому вам не нужно fs. Каждый zipEntry имеет методы getData() и getDataAsync(), которые могут использоваться для извлечения содержимого.

zipEntries.forEach(function (zipEntry) { 
    zipEntry.getDataAsync(function (data) { 
     parser.parseString(data, function (err, result) { 
      console.log(result); 
     }); 
    }); 
}); 

Кроме того, как zipEntries является Array, вы можете использовать .filter(), чтобы уменьшить его только файлы XML.

var zipEntries = zip.getEntries().filter(function (zipEntry) { 
    return !zipEntry.isDirectory && /\.xml$/.test(zipEntry.entryName); 
}); 

Вы также хотите, чтобы определить len раз из коллекции, а не с каждой записи. Вы также можете проверить, что против использования obj.length вместо того, чтобы держать count отдельно:

var len = zipEntries.length; 
var obj = []; 

zipEntries.forEach(function (zipEntry) { 
    zipEntry.getDataAsync(function (data) { 
     parser.parseString(data, function (err, result) { 
      obj.push(result); 

      if (obj.length === len) { 
       res.send(obj); 
      } 
     }); 
    }); 
}); 
+0

Спасибо большое –

Смежные вопросы