Express và ejs <% = để hiển thị JSON


77

Trong index.ejs của tôi, tôi có mã này:

var current_user = <%= user %>

Trong nút của tôi, tôi có

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

Tuy nhiên, trên trang tôi có được

var current_user = [object Object]

và nếu tôi viết

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

Tôi có được:

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

Có cách nào để chuyển một JSON sẽ là JS có thể đọc được không?

Câu trả lời:


193

Ồ, thật dễ dàng, không sử dụng <%=, hãy sử dụng <%-thay thế. Ví dụ:

 <%- JSON.stringify(user) %>

Cái đầu tiên sẽ hiển thị bằng HTML, cái thứ hai sẽ hiển thị các biến (như hiện tại, eval)


24
Câu trả lời đúng nhưng chỉ chính xác, đó là <% - JSON.stringify (user)%> tạo ra điều kỳ diệu.
Pierre Maoui,

Hàm eval có thực sự được sử dụng không hay bạn đang ngụ ý rằng kết quả tương tự như nếu eval được gọi. Tôi tò mò, bởi vì như chúng ta đều biết, eval là ...
NicholasFolk

1
Ok, vì sự tò mò của tôi, tôi đã đi sâu vào nó và phát hiện ra rằng nó thực sự sử dụng eval (). Tôi cũng nên nói thêm rằng tôi biết rằng đó là một câu nói thường được ví von và đánh giá không nhất thiết là xấu xa, chỉ dễ bị sử dụng sai. Phải đề cập đến điều đó trước khi tôi truyền cảm hứng cho một số phẫn nộ trong quần chúng.
NicholasFolk


0

nếu như tôi, đối tượng của bạn có thể bao gồm một ký tự thoát, chẳng hạn như /hoặc "sau đó sử dụng giải pháp mạnh mẽ hơn này

var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.