2011-10-07 16 views
40

Tengo una consulta bastante pesada en el servidor que da como resultado una nueva página de renderizado, y me gustaría pasar algunos de los resultados de la consulta al cliente (como una matriz de objetos JavaScript). Esto es básicamente así que no tengo que hacer una consulta JSON por separado más tarde para obtener el mismo contenido (que es básicamente estático). Los datos serán útiles eventualmente, pero no inicialmente, así que no los puse directamente en el documento.¿Pasar objetos al cliente en el nodo + express + jade?

app.get('/expensiveCall', function(req, res) { 
    // do expensive call 
    var data = veryExpensiveFunction(); 
    res.render('expensiveCall.jade', { 
     locals: { 
       data: data, 
       } 
     }); 
    }); 
}); 

data es una matriz de objetos y solo algunos se utilizan inicialmente. Me gustaría pasar la totalidad de los datos o algunos subconjuntos (dependiendo de la situación). Mi jade jade parece normal, pero me gustaría incluir algo como

<script type="text/javascript"> 
var data = #{data}; 
</script> 

pero esto no funciona (que es una matriz de objetos).

Respuesta

87

Puede no coloca en línea un objeto JS así, pero se puede JSON.stringify antes:

<script type="text/javascript"> 
    var data = !{JSON.stringify(data)}; 
</script> 
+1

sentimos que debería haber dicho antes: el jade escapa a toda emite contenido de lo que significa que también tendría que unescape se , y no está claro cómo desactivar el escape. Creo que hay una forma de hacerlo con Express, pero no estoy seguro de cómo. Puedo simplemente cambiar a un motor de plantilla diferente pero significa bifurcar el código :-(. – killermonkeys

+9

Si usa '! {}' En lugar de '# {}' el escape debe estar desactivado. – Adrien

+0

¡Ack! No entendí eso , tiene sentido. Gracias! – killermonkeys

Cuestiones relacionadas