2012-02-13 13 views
13

Estoy completamente perdido en esto; Estoy usando NodeJS para buscar un JSON y necesito pasar la variable a mi página y tener JavaScript para usar los datos.ExpressJS Pase variables a JavaScript

app.get('/test', function(req, res) { 
    res.render('testPage', { 
     myVar: 'My Data' 
    }); 

Esa es mi código Express (muy simple para propósitos de prueba); ahora usando JADE Quiero hacer acopio de información que sé para hacer en la página es simplemente

p= myVar 

Pero tengo que ser capaz de reunir estos datos en JavaScript (si es posible dentro de un archivo .js) pero por ahora sólo para mostrar la variable en un cuadro de alerta he tratado

alert(#{myVar}) 

y muchos otros si alguien puede ayudar muy apreciada

+0

No sé mucho sobre Node.JS o express, pero creo que deberías cambiar tu plantilla de testPage para incluir un con el valor de myVar –

+0

pero quizás Express tenga medios para abstraernos de eso –

+0

Si está pasando HTML use Jade, Moustache o alguna otra plantilla. Si pasa datos, utilice JSON y haga que su transporte lo analice en un objeto si la respuesta es Content-Type: application/json. –

Respuesta

10

intente lo siguiente:

alert('!{myVar}') 

Es una buena idea para codificar los datos JSON si es algo más que una cadena.

alert('!{JSON.stringify(myVar)}') 
+0

Esto solucionó mi problema gracias por su ayuda; para pasar a a.Sin embargo, el archivo js simplemente necesitaba crear la variable en el archivo .jade y luego el .js lo recibe gracias de nuevo –

3

Bueno, Javascript (y V8) tiene una función integrada para hacer JSON de una objeto, y JSON resulta ser sintácticamente compatible con Javascript.

Así que la forma más sencilla de hacer lo que su tratando de hacer sería:

<script type="text/javascript>var myVar = #{JSON.stringify(myVar)};</script> 

Y, sí, se puede usar HTML en una plantilla de Jade.

-1

Puede aprovechar Now.js para esto. Le permite compartir fácilmente las variables cliente/servidor en tiempo real.

Compruébelo usted mismo: http://www.nowjs.com/

11

Como Timoteo dijo:

<script type="text/javascript>var myVar = #{JSON.stringify(myVar)};</script> 

Esto también se puede hacer de la siguiente manera en si no te gusta escribir código HTML en las plantillas de jade:

script 
    var myVar = !{JSON.stringify(myVar)}; 
    var myVar2 = !{JSON.stringify(myVar2)}; 

Actualización: Por expreso 4 use script. en lugar de script para que se muestre como javascript en lugar de html.

0

Sé que llego un poco tarde a la fiesta, pero en realidad escribí un módulo (JShare) hace unos meses para resolver este problema exacto. Échale un vistazo: https://npmjs.org/package/jshare