¿Cómo hacer el contenido de la respuesta dinámico?
Aun tenemos un problema, tanto título como párrafo, son valores que provienen de variables, esto quiere decir que si deseamos modificar el título o el párrafo tendríamos que modificar el código.
¿Cómo almacenar valores en JSON?
-
Vamos a crear un nuevo archivo comodines.json, en el cual vamos a definir los valores de los comodines titulo y párrafo.
{ "comodines" : [ { "nombre" : "%titulo%", "valor" : "Este es el titulo de la pagina." }, { "nombre" : "%parrafo%", "valor" : "Este es el parrafo de la pagina." } ] }
Como podemos ver, nuestro objeto tiene un arreglo de comodines con el nombre del comodín y el valor de este.
-
Vamos a leer entonces este archivo desde nuestra aplicación y acceder directamente los comodines.
var comodines = JSON.parse( fs.readFileSync(__dirname + "/comodines.json") ).comodines;
-
Recorremos el arreglo de comodines, y vamos reemplazando uno por uno en el template.
comodines.forEach(function (comodin) { html = html.replace(comodin.nombre, comodin.valor); });
-
Finalmente vamos a imprimir nuevamente nuestra salida html.
respuesta.end(html);
Al final nuestro código lucirá así…
// llamamos a la librería http var http = require("http"); // llamamos a la librería fs var fs = require("fs"); // creamos nuestro server var miServidor = http.createServer((peticion, respuesta) => { respuesta.writeHead(200, { "Content-Type": "text/html" }); var html = fs.readFileSync(__dirname + "/hola_mundo.tpl").toString(); var comodines = JSON.parse( fs.readFileSync(__dirname + "/comodines.json") ).comodines; comodines.forEach(function (comodin) { html = html.replace(comodin.nombre, comodin.valor); }); respuesta.end(html); }); // inicializar el servidor miServidor.listen(1111, "127.0.0.1");
Como vemos, hemos separado los datos de nuestra aplicación
JSON
de su presentaciónTemplate
, en aplicaciones reales los datos y la presentación siempre se mantienen separados, para los datos se suelen utilizar bases de datos o consumir APIs, mientras que para la presentación motores de plantillas y frameworks escritos en Javascript.