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 = &quot;__v&quot;:0,&quot;_id&quot;:&quot;50bc01938f164ee80b000001&quot;,&quot;agents&quot;:...

有没有办法传递 JS 可读的 JSON?

【问题讨论】:

【参考方案1】:

哦,这很简单,不要使用&lt;%=,而是使用&lt;%-。例如:

 <%- 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

如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?

使用 Express 为 AngularJS 渲染一个 .ejs 模板并使用 AngularJS $scope 中的数据

node.js 的页面渲染方法ejs

使用 Node、Express 和 EJS 压缩 HTML?