Express und ejs <% =, um einen JSON zu rendern

76

In meiner index.ejs habe ich diesen Code:

var current_user = <%= user %>

In meinem Knoten habe ich

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

Allerdings erhalte ich auf der Seite

var current_user = [object Object]

und wenn ich schreibe

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

Ich erhalte:

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

Gibt es eine Möglichkeit, einen JSON zu übergeben, der JS-lesbar ist ?

huckepack
quelle

Antworten:

190

Oh, das war einfach, benutze es nicht <%=, benutze es <%-stattdessen. Zum Beispiel:

 <%- JSON.stringify(user) %>

Der erste wird in HTML gerendert, der zweite wird Variablen rendern (wie sie sind, eval)

huckepack
quelle
23
Richtige Antwort, aber um genau zu sein, es ist <% - JSON.stringify (Benutzer)%>, die die Magie wiedergibt.
Pierre Maoui
Wird die Eval-Funktion tatsächlich verwendet oder implizieren Sie, dass die Ergebnisse ähnlich sind, wenn Eval aufgerufen wurde? Ich bin neugierig, denn wie wir alle wissen, ist eval ...
NicholasFolk
1
Ok, aus Neugier habe ich mich darauf eingelassen und festgestellt, dass tatsächlich eval () verwendet wird. Ich sollte auch hinzufügen, dass ich weiß, dass es ein oft nachgeahmtes Sprichwort ist und dass die Bewertung nicht unbedingt böse ist, sondern nur leicht missbraucht wird. Musste das erwähnen, bevor ich einen Zorn unter den Massen hervorrief.
NicholasFolk
4

Beachtung!

Wenn der Benutzer durch API-Aufrufe erstellt werden kann, führt <% - zu einer schwerwiegenden XSS-Sicherheitsanfälligkeit. Mögliche Lösungen finden Sie hier:

Übergeben Sie Variablen in ExpressJS an JavaScript

user732456
quelle