Express EJS模板如何传递一个json对象来查看它是不是未定义
Posted
技术标签:
【中文标题】Express EJS模板如何传递一个json对象来查看它是不是未定义【英文标题】:Express EJS template How to pass a json object to view if it's undefinedExpress EJS模板如何传递一个json对象来查看它是否未定义 【发布时间】:2015-09-08 18:01:22 【问题描述】:当用户登录时,我将用户分配给 window.user 对象供客户端使用
请注意,我使用的是 passport.js,这意味着当用户通过身份验证时,req.user 将是一个有效的 mongoose 模型对象。否则 req.user 将是未定义的
passport.deserializeUser(function(id, done)
User.findById(id, function(err, user)
done(err, user);
);
);
locals.user 分配在我的路线中。在我的路由中间件中:
res.locals.user = JSON.stringify(req.user) //stringify in js instead of ejs, easier to write
最后一步,在我的 ejs 文件中:
<script type="text/javascript">
window.user = <%- (locals.user) || '' %>
</script>
如果用户未登录,我应该传递 ''、'' 还是 'null'? 在客户端,我最有可能使用 angular.fromJson 方法,它的文档很差:https://docs.angularjs.org/api/ng/function/angular.fromJson
但是,我可以将 jQuery.parseJSON 用于非角度模块。 目前我使用空字符串,但我必须每次以角度检查长度,这是 tedius。
【问题讨论】:
【参考方案1】:angular.fromJson 使用 javascript JSON.parse() 方法
这里有一些虚拟代码来理解 JSON.stringify 和 JSON.parse()。您可以尝试切换评论并尝试 null 和 a: 1。
<script>
var obj
//var obj = null
//var obj = a: 1
var str = JSON.stringify(obj) //returns undefined (sent from express)
str = (str || 'null') //assign 'null' string (in ejs)
var o2 = JSON.parse(str) //angular client
if (o2)
alert(o2.a)
else
alert('o2 is null')
</script>
您的问题的简短回答是:使用<%- (locals.user) || 'null' %>
【讨论】:
以上是关于Express EJS模板如何传递一个json对象来查看它是不是未定义的主要内容,如果未能解决你的问题,请参考以下文章
在作为 EJS 模板传递以查看的字符串化 JSON 中转义单引号
在 node/express + ejs 中将对象传递给客户端?
通过 NodeJS 获取 JSON 数据时,如何通过 ExpressJS 更新我的 EJS 模板?