EJS遍历MongoDB文章列表时无法显示标题的问题求助
解决EJS渲染文章标题列表为空的问题
问题现状
博客的文章列表页能生成与MongoDB中测试文章数量对应的列表项,但所有列表项的标题内容为空;直接输出article_list能看到包含正确标题的对象数组,说明数据已成功传递到前端,但模板取值逻辑有误。
问题原因
- EJS模板取值错误:你的
forEach回调函数没有接收当前迭代的单个文章对象,而是直接访问数组article_list的title属性——数组本身不存在该属性,因此返回undefined,导致标题显示为空。 - 后端冗余代码:
ArticleSchema中的author是字符串类型,而非引用其他集合的ObjectId,后端代码里的.populate("author")属于无效调用(populate仅对文档引用生效),会触发不必要的数据库查询。
解决方案
1. 修正EJS模板的循环逻辑
在forEach回调中添加参数接收单个文章对象,通过该对象获取标题:
<ul> <% article_list.forEach(function(article) { %> <li>Title: <%= article.title %></li> <% }); %> </ul>
2. 移除后端的无效populate调用
优化后的后端代码:
exports.article_list = function (req, res, next) { Article.find({}, "title author") .sort({ title: 1 }) .exec(function (err, list_articles) { if (err) { return next(err); } // 成功查询后渲染页面 res.render("article_list", { title: "Article List", article_list: list_articles, }); }); };
完成以上修改后,页面即可正确渲染每篇文章的标题。
内容的提问来源于stack exchange,提问作者Dagger
相关产品推荐
相关产品推荐

