使用Express和ejs <%=渲染JSON

87

在我的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读取

4个回答

214

哦,那很容易,不要使用<%=,而是使用<%-。例如:

 <%- JSON.stringify(user) %>

第一个将呈现为HTML,第二个将呈现变量(因为它们是eval)


25
正确的答案是,仅仅为了精确起见,是<%-JSON.stringify(user)%>渲染了魔法。 - Pierre Maoui
eval函数真的被使用了吗,还是你的意思是所得到的结果类似于调用eval函数?我很好奇,因为我们都知道eval有... - NicholasFolk
1
好的,因为我的好奇心,我深入研究了一下并发现它确实使用 eval()。我应该补充一点,我知道这是一个经常被重复的说法,eval 不一定是邪恶的,只是容易被误用。在激起群众的愤怒之前,我必须提到这一点。 - NicholasFolk

6

2

如果您的对象中包含转义字符,例如/",那么请使用以下更加健壮的解决方案:

var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>

0

现在在Express的最新版本中,这将可以工作。


哪个版本? - Stéphane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接