Curioso si estoy haciendo esto bien y si no es así como ustedes se acercarían a esto.Accediendo a las variables locales Express.js en el lado del cliente JavaScript
Tengo una plantilla de Jade que necesita representar algunos datos recuperados de una base de datos MongoDB y también necesito tener acceso a esos datos dentro de un archivo JavaScript del lado del cliente.
estoy usando Express.js y enviar los datos a la plantilla del jade de la siguiente manera:
var myMongoDbObject = {name : 'stephen'};
res.render('home', { locals: { data : myMongoDbObject } });
A continuación, en el interior de home.jade Puedo hacer cosas como:
p Hello #{data.name}!
Que escribe:
Hello stephen!
Ahora lo que quiero es als o tener acceso a este objeto de datos dentro de un archivo JS del lado del cliente para poder manipular el objeto, por ejemplo, hacer clic en un botón antes de volver a enviarlo al servidor para actualizar la base de datos.
He podido lograr esto guardando el objeto "datos" dentro de un campo de entrada oculto en la plantilla de Jade y luego obteniendo el valor de ese campo dentro de mi archivo JS del lado del cliente.
Dentro home.jade
- local_data = JSON.stringify(data) // data coming in from Express.js
input(type='hidden', value=local_data)#myLocalDataObj
Luego, en mi cliente archivo JS lado puedo acceder local_data así:
interior myLocalFile.js
var localObj = JSON.parse($("#myLocalDataObj").val());
console.log(localObj.name);
Sin embargo, esta el negocio de stringify/parsing se siente desordenado. Sé que puedo vincular los valores de mi objeto de datos a objetos DOM en mi plantilla de Jade y luego obtener esos valores usando jQuery, pero me gustaría tener acceso al Objeto real que regresa de Express en mi lado del cliente JS.
¿Es mi solución óptima? ¿Cómo pueden lograr esto?
realidad he creado un paquete de NPM hace un par de meses para resolver este problema exacto: https://github.com/brooklynDev/JShare – BFree