使用ejs嵌入用户对象

时间:2016-02-04 08:20:26

标签: javascript node.js passport.js ejs swig-template

我目前正在使用护照模块在Node.js中为Web应用程序实施身份验证。我在渲染索引页面时将用户对象返回给用户

app.route('/').get(function(req, res) {
    res.render('index', {
        isAuthenticated: req.isAuthenticated(),
        user: req.user //User Object provided by passport
    });
});

我正在尝试使用ejs将用户对象嵌入到DOM中:

<!--Embedding The User Object-->
<script type="text/javascript">
    var user = <%= user%>;
</script>

但是存在一些编码问题。这是我在浏览器中查看源代码时的输出:

<!--Embedding The User Object-->
    <script type="text/javascript">
        var user = { email: &#39;test@gmail.com&#39;,
  roles: [ &#39;user&#39; ],
  created: Thu Feb 04 2016 19:13:16 GMT+1100 (AEDT),
  __v: 0,
  _id: 56b3081cb406f8156cd3798a };
</script>

我正在关注一个使用swig的示例,其中它们处理编码,如下所示:

<!--Embedding The User Object-->
<script type="text/javascript">
    var user = {{ user | json | safe }};
</script> 

我对swig不太熟悉所以我认为它是某种流水线。我想知道如何使用ejs做到这一点?

2 个答案:

答案 0 :(得分:1)

在Swig中, {{ user | json | safe }}表示:

返回此JavaScript对象user的字符串表示形式,并返回此字符串,强制它不会自动转义。

在Jade,

!{JSON.stringify(user)}未转义

#{JSON.stringify(user)}已转义

在Ejs中,

<%- JSON.stringify(user) %>未转义

<%= JSON.stringify(user) %>已转义

答案 1 :(得分:0)

解决! EJS有一个html转义函数,就像

一样简单
<%- user %>

而不是

<%= user %>