Node.js 返回带有NodeJS的ZIP包中的文件数

Node.js 返回带有NodeJS的ZIP包中的文件数,node.js,express,unzip,Node.js,Express,Unzip,下面是我的函数,用于获取ZIP包中的文件数 // check if .ZIP package contains at least one HTML file and return number of files function validateArchive(path, callback) { var filesCount = 0; var unzipParser = unzip.Parse(); var readStream = fs.createReadStrea

下面是我的函数,用于获取ZIP包中的文件数

// check if .ZIP package contains at least one HTML file and return number of files
function validateArchive(path, callback) {
    var filesCount = 0;

    var unzipParser = unzip.Parse();
    var readStream = fs.createReadStream(path).pipe(unzipParser);
    unzipParser.on('error', function(err) {
        throw err;
    });

    readStream.on('entry', function (entry) {
        var fileName = entry.path;
        var type = entry.type; // 'Directory' or 'File'
        if (type == 'File') {
            var fext = fileName.split('.')[1];
            if (fext === 'html') {
                filesCount++;
            }
        }
        entry.autodrain();
    });

    // returns number of files
    setTimeout(function () {
        callback(filesCount);
    }, 1000);
}
正如您所看到的,我在返回文件数量方面有一个问题,因为异步进程已经就绪


如果不使用
setTimeout
方法返回文件数,您可以收听
close
事件:

unzipParser.on('close', function() {
    callback(filesCount);
});

当到达zip的末尾时发出。

您可以收听
关闭事件:

unzipParser.on('close', function() {
    callback(filesCount);
});
当到达zip的末尾时发出