Express and ejs <%= to render a JSON
In my index.ejs I have this code:
var current_user = <%= user %>
In my node I have
app.get("/", function(req, res){
res.locals.user = req.user
res.render("index")
})
However, on the page I obtain
var current_user = [object Object]
and if I write
var current_user = <%= JSON.stringify(user) %>
I obtain:
var current_user = {"__v":0,"_id":"50bc01938f164ee80b000001","agents":...
Is there a way to pass a JSON that will be JS readable?
Oh that was easy, don't use <%=
, use <%-
instead. For example:
<%- JSON.stringify(user) %>
The first one will render in HTML, the second one will render variables (as they are, eval)
Attention!
If the user can be created through API calls, <%- would leave you with serious XSS vulnerability. Possible solutions can be found here:
Pass variables to JavaScript in ExpressJS
if like me your object can include an escaped character such as /
or "
then use this more robust solution
var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>