Node.js 解压文件并将其解析为js

Node.js 解压文件并将其解析为js,node.js,Node.js,嗨,我试着从我的c驱动器解压文件,并试图解析为javascript对象 这是密码 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(param

嗨,我试着从我的c驱动器解压文件,并试图解析为javascript对象 这是密码

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

        });
    });

});
请检查一下代码,并为我提供更多的示例

好的,用于直接读取磁盘上的文件,而这些文件不是

但是,
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
是一个
数组
,因此可以使用将其简化为仅XML文件

var zipEntries = zip.getEntries().filter(function (zipEntry) {
    return !zipEntry.isDirectory && /\.xml$/.test(zipEntry.entryName);
});
您还需要从集合而不是每个条目中确定一次
len
。您还可以根据use
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);
            }
        });
    });
});