Как я могу использовать Node.js, чтобы проверить, пуст ли каталог? - PullRequest
0 голосов
/ 11 июня 2018

Я задал этот вопрос для PHP давным-давно .То же самое относится и к Node.js, приведенный ниже код кажется немного медленным при использовании в цикле - есть ли способ написать это в чистом ванильном JavaScript-коде Node.js без плагинов или 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 Ответ

0 голосов
/ 21 июня 2018

Так что если вы сделаете это

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

});

Одним из преимуществ использования карты в каталоге является то, что вы гарантируете сохранение порядка, он также выглядит чище.

Карта встроена итеративно - Object нет, это не означает, что Map является заменой для Object, есть варианты использования для обоих.Это другая история.

...