Uso de JSON en Node.js: Respuestas dinámicas del servidor web

Uso de JSON en Node.js: Respuestas dinámicas del servidor web

¿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?

  1. 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.

  2. 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;
    
  3. 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);
    });
    
  4. 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ón Template, 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.