在Node.js中,如何读取一个包含.html文件的目录,并在其中查找元素属性?

23

我甚至不知道如何开始考虑这该怎么做。基本上,想象一个文件夹,里面有一个静态网站。它包含所有的图片、样式和 html 文件等。通过我的 Node 应用程序,我想查看这个文件夹的内部,只获取 .html 文件,然后挑选出只在其中有属性 'data-template="home"' 的 .html 文件。

我知道这可能有些奇怪,但这是一个需要用户上传其静态网站文件,然后我的 Node 应用程序对这些文件进行处理的项目。

无论如何,我只是好奇如何迭代特定的文件类型,然后查看其中的内容...... 如果有任何方法可以帮助我解决这个问题,真的会很有帮助。

非常感谢,詹姆斯

2个回答

55

这段代码将扫描目录中的所有文件,然后读取 .html 文件的内容,并在其中查找字符串 data-template="home"

var fs = require('fs');

fs.readdir('/path/to/html/files', function(err, files) {
    files
         .filter(function(file) { return file.substr(-5) === '.html'; })
         .forEach(function(file) { fs.readFile(file, 'utf-8', function(err, contents) { inspectFile(contents); }); });
});

function inspectFile(contents) {
    if (contents.indexOf('data-template="home"') != -1) {
        // do something
    }
}

如果你需要更灵活的操作,你也可以使用cheerio模块,在HTML文件中查找具有该属性的元素:

var cheerio = require('cheerio');

function inspectFile(contents) {
    var $ = cheerio.load(contents);

    if ($('html[data-template="home"]').length) {
        // do something
    }
}

4
没想到一百万年里居然这么容易。非常感谢!真是太好了,谢谢你。 - littlejim84
1
非常有帮助。只是指出原始代码中的一个小错误,应该是fs.readFile('/path/to/html/files'+'/'+file, 'utf-8', ..... - Zhe Hu
1
为什么不使用 path.extname(file),而不是 file.substr(-5) - AZ.
好的...显然,我必须尊重您的格式偏好。抱歉触碰了您的代码,但是...我修复了一个语法错误(在“.html”后面出现了意外的“)”,而您通过回滚重新引入了它。下次请更加注意。 - Alcides Queiroz

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接