【问题标题】:Why is my For Loop returning just one value in EJS node js?为什么我的 For 循环在 EJS 节点 js 中只返回一个值?
【发布时间】:2018-07-29 08:43:40
【问题描述】:

我正在构建一些东西,我需要从 MongoDB 查询内容并使用 node.js 中的 EJS 模板在前端显示结果。

查询结果时一切顺利。我console.log()时返回所有数组值,但在前端使用EJS模板时,只返回一个值。

这是我查询结果的代码:

app.get('/', function (req, res) {
    user.find({}, { __v: 0, _id: 0}, function (err, result) {
        if (err) throw err; 
        result.forEach(function(u) {
            console.log(u.imgs); 
            res.render('pages/index',{
                path: u.imgs,
                state: req.session.state
        });   
    }); 
});

我在 EJS 中的代码:

<% for(var i=0; i<path.length; i++) { %>        
    <%= path[i] %> 
<% } %>

这是user中的代码

var userSchema = mongoose.Schema ({


imgs: String

})

你认为我的代码有什么问题?

【问题讨论】:

  • 你为什么要循环调用res.render()?这将一个接一个地立即呈现n 的页面数量,其中nresults 数组的长度,因此从这个角度来看,您不会真的希望继续进行渲染调用作为您在浏览器中的视图将有效地保持清新时刻。另外,您能否向我们展示User 架构定义以及您对前端的最终目标是什么,您是否尝试显示每个用户的图像路径?
  • 不,我不想显示每个用户的图像路径。我在user 模式中提供了代码。 @chridam
  • 那么你的预期输出是什么?
  • 数组中有两个 2 值,但只有一个(第一个)出现。

标签: arrays node.js mongodb ejs


【解决方案1】:

你需要像这样的 HTML 标签

<ul>
<% for(var i=0; i<path.length; i++) {%>
   <li><%= path[i] %></li>
<% } %>
</ul>

【讨论】:

    【解决方案2】:

    删除查询中的 forEach 循环并将结果数组映射到路径属性,即

    app.get('/', function (req, res) {
        user.find({}, { __v: 0, _id: 0}, function (err, result) {
            if (err) throw err; 
            res.render('pages/index',{
                path: result.map(u => u.imgs),
                state: req.session.state
            });  
        }); 
    });
    

    【讨论】:

    • 这是一个救生员。它现在工作正常。谢谢@chridam
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多