【问题标题】: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。

【问题讨论】:

    标签: jquery json angularjs node.js express


    【解决方案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>
    

    您的问题的简短回答是:使用&lt;%- (locals.user) || 'null' %&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      相关资源
      最近更新 更多