Express EJS模板如何传递json对象来查看它是否是未定义的

当用户login时,我将用户分配给window.user对象供客户端使用

请注意,我使用passport.js,这意味着当用户进行身份validation时,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> 

如果用户没有login,我应该通过“',还是'{}'或'空'? 在客户端,我最有可能使用angular.fromJson方法,它的文档很差: https ://docs.angularjs.org/api/ng/function/angular.fromJson

不过,我可能使用jQuery.parseJSON非angular度模块。 目前我使用空string,但我必须每次检查长度,这是tedius。

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' %> <%- (locals.user) || 'null' %>