85 votes

Express et ejs <%= pour rendre un JSON

Dans mon index.ejs, j'ai ce code :

var current_user = <%= user %>

Dans mon nœud, j'ai

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

Cependant, sur la page que j'obtiens

var current_user = [object Object]

et si j'écris

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

J'obtiens :

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

Existe-t-il un moyen de transmettre un JSON qui sera JS lisible ?

209voto

haskellguy Points 1595

Oh, c'était facile, n'utilisez pas <%= , utiliser <%- au lieu de cela. Par exemple :

 <%- JSON.stringify(user) %>

La première rendra le code HTML, la seconde rendra les variables (telles qu'elles sont, eval).

5voto

user732456 Points 350

Attention !

Si l'utilisateur peut être créé par le biais d'appels API, <%- vous exposerait à une grave vulnérabilité XSS. Des solutions possibles peuvent être trouvées ici :

Passer des variables à JavaScript dans ExpressJS

2voto

Cookie_Wookie_7 Points 21

Si, comme moi, votre objet peut inclure un caractère échappé tel que / o " utilisez alors cette solution plus robuste

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

0voto

TrainerCheese Points 1

Cela fonctionnera désormais dans la dernière version d'Express

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X