Express y ejs

1 minuto de lectura

avatar de usuario
a cuestas

En mi index.ejs tengo este código:

var current_user = <%= user %>

En mi nodo tengo

app.get("https://stackoverflow.com/", function(req, res){
    res.locals.user = req.user
    res.render("index")
})

Sin embargo, en la página obtengo

var current_user = [object Object]

y si escribo

var current_user = <%= JSON.stringify(user) %>

Yo obtengo:

var current_user = {&quot;__v&quot;:0,&quot;_id&quot;:&quot;50bc01938f164ee80b000001&quot;,&quot;agents&quot;:...

¿Hay alguna manera de pasar un JSON que será JS legible?

avatar de usuario
a cuestas

Oh, eso fue fácil, no uses <%=usar <%- en cambio. Por ejemplo:

 <%- JSON.stringify(user) %>

El primero se renderizará en HTML, el segundo renderizará variables (tal como son, eval)

  • Respuesta correcta, pero solo para precisar, es <%-JSON.stringify(user)%> el que hace la magia.

    -Pierre Maoui

    31 de enero de 2014 a las 11:29

  • ¿Se usa realmente la función eval, o está dando a entender que los resultados son similares a si se llamara a eval? Tengo curiosidad, porque como todos sabemos, eval es…

    – NicholasFolk

    2 mayo 2015 a las 22:30

  • Bien, debido a mi curiosidad, me sumergí y descubrí que, de hecho, usa eval(). También debo agregar que sé que es un dicho que se repite a menudo y que eval no es necesariamente malvado, simplemente se usa mal con facilidad. Tenía que mencionar que antes inspiré cierta ira entre las masas.

    – NicholasFolk

    2 mayo 2015 a las 22:33

avatar de usuario
usuario732456

¡Atención!

Si el usuario se puede crear a través de llamadas API, <%- lo dejaría con una grave vulnerabilidad XSS. Las posibles soluciones se pueden encontrar aquí:

Pasar variables a JavaScript en ExpressJS

si, como yo, su objeto puede incluir un carácter escapado como / o " entonces use esta solución más robusta

var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>

Esto funcionará ahora en la última versión de Express

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad