Express і ejs <% = для відображення JSON


77

У своєму index.ejs я маю такий код:

var current_user = <%= user %>

У своєму вузлі я маю

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

Однак на сторінці, яку я отримую

var current_user = [object Object]

і якщо я напишу

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

Я отримую:

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

Чи є спосіб передати JSON, який буде читабельним у JS ?

Відповіді:


193

О, це було легко, не використовуйте <%=, використовуйте <%-замість цього. Наприклад:

 <%- JSON.stringify(user) %>

Перший відображатиметься в HTML, другий відображатиме змінні (як вони є, eval)


24
Правильна відповідь, але точно - точно <% - JSON.stringify (user)%> надає магію.
Pierre Maoui

Чи фактично використовується функція eval, чи ви натякаєте, що результати подібні до тих, які були викликані eval. Мені цікаво, адже, як ми всі знаємо, eval - це ...
NicholasFolk

1
Гаразд, тому через свою цікавість я занурився в неї і виявив, що насправді в ній використовується eval (). Слід також додати, що я знаю, що це часто папуга, і припущення не обов’язково є злом, його просто неправильно використовувати. Доводилося згадувати, що раніше я надихав певний гнів серед мас.
NicholasFolk,


0

якщо, як і я, ваш об'єкт може містити символ, що вийшов, наприклад, /або "використайте це більш надійне рішення

var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.