从路由传递JSON变量到ejs

4
我有一些用express+EJS编写的代码,
1)在app.js中,mongo集合对象被创建,
app.locals.userCollection = db.get('userData');

在 user.js 的 Express 路由文件中,我从这个数据库连接中获取数据,并想将它传递给 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 [0] .attr1,我在路由和EJS中应该编写什么代码?
问候 Hammer
1个回答

6
你可以尝试以下方法:
在Node.js中: res.render('user', data: res.locals.returnValue); 在EJS中:
<script type='text/javascript'>
  var rows =<%-JSON.stringify(data)%>
  alert(rows);
</script>


更新(根据评论中的问题)

如果您想循环遍历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>

2
谢谢Amol。虽然我认为还需要进行一些小修改,即res.render('user', data: res.locals.returnValue);应该改为res.render('user', {data: returnValue});。 - Hammer
@Hammer 应该是什么?它已经是这样了:res.render('user', {data: returnValue}); - Amol M Kulkarni
Amol,我能通过数据进行迭代吗?像这样的代码:<script> var rows =<%-JSON.stringify(data)%> </script> <% for(var i=0; i<rows.length; i++) {%> <li><%= rows[i] %></li> <% } %> - Hammer
@Hammer:如果你想循环遍历 rows ,那么它应该是一个数组实例。在你的情况下,如果你想要循环遍历,请尝试使用 Array.isArray(rows) ;如果它返回 true,则循环遍历(不要将其字符串化)。我也会在我的答案的“更新”部分中更新示例代码。 - Amol M Kulkarni
1
@vardha:EJS是一个模板引擎,当你使用<%- %>时,它会给你原始输出,所以现在你知道json.stringify()操作在服务器还是在客户端上执行。我相信你会理解与你问题相关的答案https://dev59.com/RpHea4cB1Zd3GeqPnU-B#33884595。 - Amol M Kulkarni
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接