2012-12-09 28 views
48

Trong index.ejs của tôi, tôi có mã này:Express và EJS <% = để render một JSON

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 để vượt qua một JSON sẽ JS có thể đọc được?

Trả lời

140

Rất dễ, không sử dụng <%=, thay vào đó hãy sử dụng <%-. Ví dụ:

<%- JSON.stringify(user) %> 

Người đầu tiên sẽ làm trong HTML, điều thứ hai sẽ làm cho biến (như họ đang có, eval)

+2

THANK YOU !!! Tôi đã bị mắc kẹt trên điều này lol –

+22

câu trả lời đúng nhưng chỉ để chính xác, nó là <% - JSON.stringify (người dùng)%> mà làm cho phép thuật. –

+0

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

2

Chú ý!

Nếu người dùng có thể được tạo thông qua các cuộc gọi API, <% - sẽ khiến bạn bị lỗ hổng XSS nghiêm trọng. Có thể tìm thấy các giải pháp có thể có tại đây:

Pass variables to JavaScript in ExpressJS

Các vấn đề liên quan