为啥我的 For 循环在 EJS 节点 js 中只返回一个值?

Posted

技术标签:

【中文标题】为啥我的 For 循环在 EJS 节点 js 中只返回一个值?【英文标题】: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 值,但只有一个(第一个)出现。 【参考方案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

以上是关于为啥我的 For 循环在 EJS 节点 js 中只返回一个值?的主要内容,如果未能解决你的问题,请参考以下文章

在 express 节点 js 中重新渲染 EJS 模板

在 Express/EJS 模板中,循环数组的最简洁方法是啥?

ejs如何迭代对象

你如何在 EJS 中执行 for 循环/for each?

为啥我的 for 循环在“继续”之后没有重新评估条件?

使用 ejs 模板和 MYSQL 在节点 js 中的服务器端分页