代码之家  ›  专栏  ›  技术社区  ›  TheBlackBenzKid

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

  •  0
  • TheBlackBenzKid  · 技术社区  · 7 年前

    我问过 this question for PHP a long time ago .同样适用于node.js,下面的代码在循环中使用时似乎有点慢——有没有一种方法可以用纯node.js的普通javascript来编写它,而不使用插件或react.js等?

    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'))
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Zardoz    7 年前

    所以如果你这样做

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

    您将看到结果是:

    空“…”[]

    所以您的代码可以简化为

    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是内置的iterableobject不是,这不是说map是一个对象的替换,两者都有用例。这是另一个故事。