Express 和 ejs <%= 渲染 JSON
Posted
技术标签:
【中文标题】Express 和 ejs <%= 渲染 JSON【英文标题】:Express and ejs <%= to render a JSON 【发布时间】:2012-11-27 02:53:29 【问题描述】:在我的 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 = "__v":0,"_id":"50bc01938f164ee80b000001","agents":...
有没有办法传递 JS 可读的 JSON?
【问题讨论】:
【参考方案1】:哦,这很简单,不要使用<%=
,而是使用<%-
。例如:
<%- JSON.stringify(user) %>
第一个将呈现在 html 中,第二个将呈现变量(因为它们是 eval)
【讨论】:
正确答案,但准确地说,是 呈现了魔法。 是实际使用了 eval 函数,还是暗示如果调用 eval 的结果类似于。我很好奇,因为众所周知,eval 是... 好的,出于好奇,我深入研究了它,发现它实际上使用了 eval()。我还应该补充一点,我知道这是一个经常鹦鹉学舌的说法,而 eval 不一定是邪恶的,只是很容易被滥用。不得不提一下,在我激起群众的愤怒之前。【参考方案2】:注意!
如果用户可以通过API调用创建,
Pass variables to javascript in ExpressJS
【讨论】:
【参考方案3】:如果您的对象像我一样可以包含转义字符,例如 /
或 "
,那么请使用这个更强大的解决方案
var current_user = <%- JSON.stringify(user).replace(/\\/g, '\\\\') %>
【讨论】:
以上是关于Express 和 ejs <%= 渲染 JSON的主要内容,如果未能解决你的问题,请参考以下文章
express-ejs-layout 有时无法检测到传递参数
如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?
使用 Express 为 AngularJS 渲染一个 .ejs 模板并使用 AngularJS $scope 中的数据