【问题标题】:Can I render JSON.parse data to EJS?我可以将 JSON.parse 数据渲染到 EJS 吗?
【发布时间】:2018-04-14 10:35:40
【问题描述】:

我是 NodeJS 和 Express 的新手(通常是编码)。我正在尝试将数据呈现到 EJS 视图页面,以便我可以在前端对其进行操作。它看起来像这样:

app.set('view engine','ejs');
var str = JSON.parse('[{"name":"bill", "age":"26"}, {"name":"jeff", "age":"32"}]');

str.forEach(function(data){
    console.log(data.name);
});

app.get('/data', function(req, res){
    res.render('data', {str:str});
});

我尝试通过输入<%= data %> 在 EJS 文件中对其进行测试,我在浏览器中得到的输出是 [object Object],[object Object]。我觉得我少了几块。有人可以帮帮我吗?

谢谢

编辑: 谢谢 Booligoosh。只是想补充一点,我必须在 EJS 端将其转换回 JSON 才能使其工作。 :)

【问题讨论】:

    标签: json node.js express ejs


    【解决方案1】:

    ejs模板中我们可以渲染json对象如下:

    <%- JSON.stringify(user) %>
    

    我尝试使用 &lt;%= JSON.stringify(user) %&gt; (&lt;%=),但它会打印双引号的 asci 代码值。

    【讨论】:

      【解决方案2】:

      您正尝试将包含两个对象的数组打印到 ejs 模板。在模板中,您只打印 strings

      要将对象打印到模板中,我们首先需要对其进行字符串化

      <%= JSON.stringify(str) %>
      

      要访问数组中对象的属性,我们引用数组 index 和属性 key

      <%= str[0].name %>
      

      迭代数组并打印出我们使用 forEach 的所有值:

      <ul>
          <% str.forEach(function(o) { %>
              <li><%= o.name %> - <%= o.age %></li>
          <% }); %>
      </ul>
      

      【讨论】:

      • 如何迭代字符串?如果 str 是一个字符串,我不确定你如何调用 forEach 。
      【解决方案3】:

      试试这个:

      app.set('view engine','ejs');
      var str = JSON.parse('[{"name":"bill", "age":"26"}, {"name":"jeff", "age":"32"}]');
      
      str.forEach(function(data){
          console.log(data.name);
      });
      
      app.get('/data', function(req, res){
          res.render('data', {str: JSON.stringify(str) });
      });
      

      您需要将 JSON 对象转换回字符串,然后再使用 JSON.stringify 将其传递给模板,否则它将仅使用 .toString 呈现,返回 [object Object],[object Object]

      【讨论】:

        猜你喜欢
        • 2016-09-14
        • 2018-09-30
        • 1970-01-01
        • 2016-03-01
        • 2012-04-15
        • 2019-02-03
        • 1970-01-01
        • 2019-08-06
        • 2021-03-25
        相关资源
        最近更新 更多