如何使用 Node.js 检查目录是否为空?

How can I use Node.js to check if a directory is empty?

我问了this question for PHP a long time ago。这同样适用于 Node.js 下面的代码在循环中使用时看起来有点慢 - 有没有办法在没有插件或 React.js 的情况下用纯 Node.js vanilla JavaScript 编写它等等?

const dirname = 'cdn-assets/'

fs.readdir(dirname, function(err, files) {
    if (err) {
       // some sort of error
    } else {
       if (!files.length) {
           // directory appears to be empty
       }
    }
});

另外,我可以写一个进一步的条件来检查:

if(directory_has_these_files('.js, .css, .jpg, .svg, .mp4'))

所以如果你这样做

fs.readdir('/path/to/empty_dir', (data, err) => console.log(data, '.....', err)) 

你会看到结果是:

null '.....' []

所以你的代码可以简化为

fs.readdir(dirname, (err, files)  => {
if (err && !files) {
    console.error(err)
}

console.info('the files --> ', files)

let regexp = RegExp('.jpeg|.doc|.png|.zip', 'gi')

for(result in files) {
    if(regexp.test(files[result])) {
        console.log('I have the following', files[result])
    }
}});

不过....

我们想要这种快速、现代和高效的方式,不是吗?!

所以这更好:

fs.readdir(dirname, (err, files)  => {
    if (err && !files) {
        console.error(err)
    }

    let regexp = RegExp('.jpeg|.doc|.png|.zip', 'gi');

    files.filter(
        file => file.match(regexp)
    ).map(
        result => console.log('I have the following',result)
    );

});

在目录上使用映射的优点之一是您可以保证顺序的保存,而且看起来更干净。

Map是内置iterable — Object不是,这并不是说Map是Object的替代品,两者都有用例。那是另外一回事了。