【问题标题】:Pass JSON var from route to ejs将 JSON var 从路由传递到 ejs
【发布时间】:2014-05-19 09:11:45
【问题描述】:

我在express+EJS中有一些代码,

1) 在 app.js 中,创建了 mongo 集合对象,

app.locals.userCollection = db.get('userData');

2) 在 user.js express route 文件中,我从这个 DB 连接中获取数据并希望将其传递给 EJS 进行渲染,

exports.list = function(req, res){
   req.app.locals.userCollection.find({},function(err , returnValue){
       if(returnValue.length>0){          
          res.render('user', res.locals.returnValue);
       }
       return err;
       });

};

3) 在 user.ejs 中,我尝试使用

访问它
<div><script>
var test = <%- returnValue %>;

它给了我 returnValue is not defined 错误。

我可以知道是否要访问 returnValue[0].attr1,我应该在路由和 EJS 中编写什么代码?

问候 锤子

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    您可以尝试以下操作:

    在 Node.js 中:

    res.render('user', data: res.locals.returnValue);

    在 EJS 中:

    <script type='text/javascript'>
      var rows =<%-JSON.stringify(data)%>
      alert(rows);
    </script>
    


    更新(根据 cmets 提出的问题)

    如果你想循环rows,那么你不应该使用JSON.stringify(),因为它会将你的对象转换为String,你可以尝试执行以下操作(如果服务器放置的数据是数组对象,则以下代码有效)。

    <script type='text/javascript'>
        <% data.forEach(function(dataRow, idxOfRow, orgnlAryObject) {
            // You can directly use the dataRow to get each row from the array Object `data`
            //alert(JSON.stringify(dataRow)); // <== You can try this
        }); %>
    </script>
    

    【讨论】:

    • 谢谢阿莫尔。虽然我认为仍然有一个重大的修改,res.render('user', data: res.locals.returnValue);应该是 res.render('user', {data: returnValue});
    • @Hammer 应该是?它已经是.. res.render('user', {data: returnValue});
    • Amol,有没有办法可以遍历数据?比如
  • @Hammer:如果你想在rows 上循环,那么它应该是 Array 的实例。在你的情况下,如果你想循环。然后尝试使用Array.isArray(rows);,如果它返回true,然后循环(不要对其进行字符串化)。我将在我的答案的更新部分更新示例代码。
  • @vardha:EJS 是一个模板引擎,当您使用&lt;%- %&gt; 时,它会为您提供原始输出,所以现在您知道json.stringify() 操作在服务器上执行的位置或在客户端上。我相信你会明白你的问题stackoverflow.com/a/33884595/1933917的相关答案
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签