如何使用files.foreach从express中删除文件夹中的某些文件

时间:2016-04-19 13:57:09

标签: express ejs

我的index.js文件中有以下代码,用于表达/节点应用程序

// BACKGROUNDS
fs.readdir('public/img/backgrounds/',function(err,files){
  if(err) throw err;
  files.forEach(function(file){
    myBGfiles.push(file);
  });
});

它会提取该文件夹中的所有文件,包括gitignore和ds_store。这样做有没有办法忽略这些文件?

我尝试使用if语句来排除它们,但我不确定这是否是实现此目的的最佳方法,也不确定所需的语法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您必须使用if语句。 function download() { var dt = canvas.toDataURL('image/png'); this.href = dt; }; 方法无法在迭代中See the docs停止。

因此,您需要使用if语句忽略要忽略的文件,或者需要使用其他类型的循环,您也可以white使用if语句。差异非常大(注意检查array.forEach();continue的区别:

请注意,我冒昧地做了一些代码格式化。

使用isBackgroundFile

isNonBackgroundFile

或使用ECMAscript 6 array.forEach();

fs.readdir('public/img/backgrounds/', function(err, files) {
    if(err) {
        throw err;
    }

    files.forEach(function(file) {
        if (isBackgroundFile(file)) {
            myBGfiles.push(file);   
        }
    });
});

如果您的Node版本不支持ECMAscript 6,您可以使用for .. of ..

fs.readdir('public/img/backgrounds/', function(err, files) {
    if(err) {
        throw err;
    }

    for (let file of files) {
        if (isNonBackgroundFile(file))   {
            continue;
        }

        myBGfiles.push(file);
    }
});

对于for .. in ..和isNonBackgroundFile`,您可以这样做:

fs.readdir('public/img/backgrounds/', function(err, files) {
    if(err) {
        throw err;
    }

    for (var file in files) {
        if (files.hasOwnProperty(file)) {
            if (isNonBackgroundFile(file))   {
                continue;
            }

            myBGfiles.push(file);
        }
    }
});

如果您想知道是否可以向isBackgroundFile添加选项以仅返回具有特定扩展名的文件,则这是不可能的。

有一个能够做到这一点的图书馆,glob但是我会说if语句替代方案能够完全满足你的需求。