Digamos que tenemos un JSON:
[ { "id": 1, "title": "Title 1", "description": "Description 1" }, { "id": 2, "title": "Title 2", "description": "Description 2" }, { "id": 3, "title": "Title 3", "description": "Description 3" } ]Y un archivo EJS llamado index.ejs
<!DOCTYPE html> <html lang="en"> <body> <% data.forEach(item => { %> <h1><%- item.title %></h1> <p><%- item.description %></p> <% }) %> </body> </html>Simplemente puedo usar este código javascript para procesar los datos a través de express:
const express = require("express"); const app = express(); const data = require("./data.json"); app.set("view engine", "ejs"); app.get("/", (req, res) => { res.render("index", { data }); }); app.listen(4000); Sin embargo, ¿qué pasa si quiero crear las 3 páginas HTML y servirlas a través de Nginx? Podría usar fs para crear los archivos html. Pero la pregunta es, ¿cómo puedo crear las 3 páginas generadas usando EJS pero renderizar las páginas a través de Nginx en lugar de app.get() de node.js?
Si los datos son estáticos (se conocen de antemano y no cambian), puede generar las páginas HTML una vez como parte de algún proceso de compilación escribiendo un script de nodejs separado que use EJS para generar los archivos HTML y luego guarde el HTML generado. archivos a un directorio específico de nginx y deje que nginx sirva las páginas web estáticas desde allí.
Hice algo similar para un sitio web github.io donde usé un script nodejs y un motor de plantilla para generar previamente páginas HTML estáticas que luego se publicaron a través de github.io. Esto me permitió usar las características de las plantillas (encabezado común, pie de página común, estilos comunes, etc.) para generar un conjunto de páginas HTML estáticas. Cuando quiero actualizar las páginas web, puedo simplemente actualizar las plantillas y regenerarlas en lugar de editar manualmente cada página HTML.
Si los datos son dinámicos, entonces nginx no tiene idea de cómo generarlos, ya que no es compatible directamente con este tipo de motores de plantilla (que están diseñados para motores de Javascript), por lo que debe seguir sirviendo plantillas EJS desde nodejs.