2011-08-05 31 views
21

Nie mogę nawet zacząć myśleć o tym, jak to się stanie. Zasadniczo wyobraź sobie folder i ma on statyczną stronę internetową. Ma wszystkie obrazy, style i pliki html itp. Z moją aplikacją Node chcę zajrzeć do tego folderu, pobrać tylko pliki .html, a następnie wybrać tylko pliki .html, które mają atrybut "data-template =" dom "" w nich.W Node.js, czytając katalog plików .html i wyszukując w nich atrybuty elementów?

Wiem, że to może wydawać się dziwne, ale jest to projekt, który wymaga od użytkownika załadowania statycznych plików witryny, a następnie moja aplikacja węzła wykonuje dla nich pliki.

W każdym razie po prostu ciekawiło mnie powtarzanie pewnych typów plików, a następnie zaglądanie do nich ... Każda pomoc w podejściu do tego naprawdę mi pomoże.

Dziękujemy, James

Odpowiedz

53

Ten fragment kodu wyszuka wszystkie pliki w katalogu, a następnie przeczyta zawartość plików .html, a następnie odszuka w nich ciąg znaków 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 
    } 
} 

Jeśli potrzebujesz większej elastyczności, można również użyć modułu cheerio szukać elementu w pliku html z tego atrybutu:

var cheerio = require('cheerio'); 

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

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

Nigdy nie myślałem w ciągu milionów lat byłoby to takie proste . Wielkie dzięki! Co za wspaniała odpowiedź! Dziękuję Ci. – littlejim84

+0

bardzo pomocne. aby wskazać mały błąd w oryginalnym kodzie, powinno to być 'fs.readFile ('/ path/to/html/files' + '/' + file, 'utf-8', .....' –

+1

Zamiast 'file.substr (-5)', dlaczego nie używać 'path.extname (file)'? –

Powiązane problemy