Node.JS 异步遍历目录

Node.JS 官方的模块只提供了列出某目录所有文件的命令 fs.readdir,要用异步的方式遍历一个目录并记录所有文件的内容,需要仔细处理。下面的代码参考了后面列出的资料,并增加了排除某些文件的功能:

var fs = require('fs');

function walkInto(dir, excludes, back) {

    var result = [];

    fs.readdir(dir, function(err, files){

        if (err) back(err);

        files = files.filter(function(value){

            return (value[0] != '.') && (excludes.indexOf(value) == -1);

        });

        var pending = files.length;

        if (!pending) return back(null, result);

        files.forEach(function(file){

            fs.stat(dir + '/' + file, function(err, stats) {

                if (stats.isFile()) {

                    result.push(dir + '/' + file);

                    if (!--pending) back(null, result);

                }

                if (stats.isDirectory()) {

                    walkInto(dir + '/' + file, [], function(err, res){

                        result = result.concat(res);

                        if (!--pending) back(null, result);

                    })

                }

            });

        });

    });

}

参考资料:
[1] Stack Overflow - node.js fs.readdir recursive directory search
[2] Stack Overflow - Recursivly read a directory in NodeJS

你可能感兴趣的:(node.js)