Incluir bloques HTML usando node.js

Esto es lo que quiero pero probablemente no puedo tener:

Usando node.js y express y quizás ejs, me gustaría, mientras escribo un archivo HTML normal en el directorio de mi cliente, el lado del servidor incluye un bloque de plantilla de HTML. También sería genial si pudiera pasar variables a la inclusión desde el documento HTML.

Sooo algo como:

       ... <>   

¿Hay algo en el mundo de los nodos que funcione así? ¿O cualquier cosa que se acerque y que pueda ser adaptada para esta funcionalidad? No lo usaría exactamente de la manera indicada aquí, pero esta es la funcionalidad que estoy buscando.

He buscado en jade, manillares, ascua y ejs, y ejs parece ser el más cercano. Tal vez uno de estos ya haga esto, pero estoy confundido acerca de la implementación.

¡Cualquier sugerencia seria genial!

Ok lo tengo …

server.js

  var express = require('express'); var server = express(); var ejs = require('ejs'); ejs.open = '{{'; ejs.close = '}}'; var oneDay = 86400000; server.use(express.compress()); server.configure(function(){ server.set("view options", {layout: false}); server.engine('html', require('ejs').renderFile); server.use(server.router); server.set('view engine', 'html'); server.set('views', __dirname + "/www"); }); server.all("*", function(req, res, next) { var request = req.params[0]; if((request.substr(0, 1) === "/")&&(request.substr(request.length - 4) === "html")) { request = request.substr(1); res.render(request); } else { next(); } }); server.use(express.static(__dirname + '/www', { maxAge: oneDay })); server.listen(process.env.PORT || 8080); 

y en / www tengo los siguientes archivos .html:

index.html

  {{include head.html}} {{include header.html}} 

Hello world!

{{include footer.html}}

head.html

               {{include include.css.html}}    

include_css.html

      

header.html

  

HEADER

footer.html

  

FOOTER

Todo llega, incluso incluye en contenido incluido y estático. Todo se realiza en archivos html, y en un contexto que parece una creación web de vainilla.

++++ Oops +++++ Bueno, yo casi todo. Olvidé que también quería poder pasar variables a la inclusión desde las plantillas. Todavía no lo he intentado ... ¿alguna idea?

++++ Update +++++

Ok, lo he descubierto.

Esta discusión lo dejó en claro, supongo que no sabía lo suficiente sobre cómo funcionaban los ejs.

He cambiado index.html para comenzar con las declaraciones de variables:

  {{ var pageTitle = 'Project Page'; var projectName = 'Project Title'; }} 

y luego puede llamar a estas variables desde dentro de las inclusiones, sin importar cuán profundamente estén anidadas.

Entonces, por ejemplo, index.html incluye start.html que incluye header.html. Dentro del encabezado .html puedo llamar a {{= projectName}} dentro del encabezado aunque se haya declarado dentro de index.html.

He puesto toda la cosa en github .

Yo recomendaría nunjucks o pejs . Nunjucks está inspirado en jinja, mientras que pejs es solo ejs + herencia, locking y soporte de archivos.

pejs tiene algunos problemas con el espacio masticando en este momento, pero sigue siendo bastante útil. De los dos, prefiero la capa de separación que viene con nunjucks.

Jade es muy bueno y tiene el conjunto de funciones que estás buscando, pero tiene una syntax muy única. Referencias para jade: herencia de plantillas , bloques , incluye

Mantenlo simple, usa templatesjs

Esto se puede hacer fácilmente usando templatesjs

archivo html [index.html] :

    <%title%>    <%include header.html%> ........ <%include footer.html%>   

ahora en el archivo node.js :

 var tjs = require("templatesjs") fs.readFile("./index.html", function(err,data){ // provided the file above is ./ index.html if(err) throw err; tjs.set(data); // invoke it tjs.render("title", "home");//render the page title }); 

estás listo . witll templatesjs incluirá automáticamente header.html y footer.html todo lo que tienes que hacer es representar el título de la página.

una buena ayuda se puede encontrar aquí

  • instalación : $ npm install templatesjs

Espero que esto ayude

Bueno, puedo sugerir la forma más fácil.

El uso de templatesjs será la opción más fácil aquí, es un nuevo módulo que hace esas cosas tan fáciles.

asummos que queremos incluir header.html dentro de index.html

html

  <%include header.html%>  

node.js

 var temp = require('templatesjs'); fs.readFile("./index/html), function(err,data){ if(err) throw err; var output = temp.set(data); res.end(output); }); 

No puedo encontrar nada más fácil que esto. instalar templatesjs

$ npm install templatesjs

Jade permite incluir elementos del lado del servidor de bloques HTML y cualquier variable con ámbito local se pasará a la plantilla de jade incluida. Pero los dos archivos deben estar en formato de syntax de jade y no en HTML sin formato si desea hacerlo.

Cualquier variable que le gustaría pasar solo se puede agregar al objeto locals.