Reputation: 1713
When I send an object with an array of objects in it from my express route to my client, I get an [Object object] and then when I try to stringify it, I get this crazy string with this console message
var messages = "<%=(JSON.stringify(messages))%>"
console.log(messages)
Which prints this out to the console ...
{"messages":[{"content":"cool mane","creator":"joe"},{"content":"test 4","creator":"joe"},{"content":" ewgdqf","creator":"joe"},
It should be something so I can iterate through it by doing messages[0].content but I'm getting this crazy string that won't let me do anything with it...
If I try to loop through it, it just prints out each character by itself.
Upvotes: 14
Views: 8190
Reputation: 816384
When using <%= ... %>
, EJS will encode / escape any output. That's why the "
in the JSON are encoded as "
. According to this answer, you can prevent escaping by using <%- ... %>
instead.
There is also no need to put the output inside a string literal. It's actually bad since you can get problems with nested quotes. Just let it output directly into the JS code:
var messages = <%-JSON.stringify(messages)%>;
Upvotes: 21
Reputation: 1169
Try to change this :
var messages = "<%=(JSON.stringify(messages))%>"
console.log(messages)
With this :
var messages = JSON.stringify("<%=messages%>");
console.log(messages)
Upvotes: -1