2011-08-05 14 views
21

Ni siquiera puedo empezar a pensar en cómo se haría esto. Básicamente, imagine una carpeta y tiene un sitio web estático en ella. Tiene todas las imágenes, estilos y archivos html, etc. Con mi aplicación Node, quiero buscar dentro de esta carpeta, obtener solo los archivos .html y luego seleccionar solo los archivos .html que tienen el atributo 'data-template =' casa "'dentro de ellos.En Node.js, ¿lee un directorio de archivos .html y busca atributos de elementos dentro de ellos?

Sé que esto parece un poco extraño tal vez, pero es para un proyecto que requiere que el usuario cargue sus archivos de sitios web estáticos y luego mi aplicación Node les hace cosas a los archivos.

De todos modos, tenía curiosidad por iterar sobre ciertos tipos de archivos y luego mirar dentro de ellos ... Cualquier ayuda para acercarse a esto realmente me ayudaría.

Muchas gracias, James

Respuesta

53

Este fragmento de código buscará todos los archivos en un directorio, luego leerá el contenido de los archivos .html y luego buscará una cadena data-template="home" en ellos.

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 
    } 
} 

Si necesita más flexibilidad, también se puede utilizar el módulo cheerio para buscar un elemento en el archivo html con ese atributo:

var cheerio = require('cheerio'); 

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

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

Nunca pensé en un millón de años sería tan fácil . ¡Muchas gracias! ¡Qué gran respuesta! Gracias. – littlejim84

+0

muy útil. solo para señalar un pequeño error en el código original, debería ser 'fs.readFile ('/ path/to/html/files' + '/' + file, 'utf-8', .....' –

+1

En lugar de 'file.substr (-5)', ¿por qué no usar 'path.extname (file)'? –

2

Tome una mirada en el módulo de sistema de archivos nodejs

http://nodejs.org/docs/v0.5.3/api/fs.html

Usted podría utilizar fs.readdir() para obtener los nombres de todos los archivos, a continuación, leer el. html ones para encontrar 'data-template = home'.

Cuestiones relacionadas