You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将同一文章数据渲染至多个EJS视图?博客首页展示最新文章

解决多页面共享文章数据的问题

问题根源

你现在的问题出在三个地方:

  1. 首页index.ejs的路由未查询文章数据并传递给模板,模板里的article_list变量根本不存在,自然返回undefined
  2. 当前查询文章的代码只指定返回title和author字段,没包含content,就算拿到数据也取不到内容
  3. EJS模板里不能用array[-1]语法取数组最后一项,JavaScript里得用array[array.length - 1]或者倒序排序后取第一项

具体解决方案

1. 封装公共的文章查询函数

把文章查询逻辑抽成公共函数,方便多个路由复用:

// 可放在articleController.js中
const getArticles = (callback) => {
  Article.find({}, "title author content") // 新增content字段查询
    .sort({ _id: -1 }) // 按MongoDB默认ID倒序(自带时间戳,最新文章排最前)
    .populate("author")
    .exec(callback);
};

如果你的Schema里有createdAt字段,也可以替换成.sort({ createdAt: -1 }),逻辑更直观

2. 改造文章列表路由(保留原有功能)

原article_list函数调用公共查询函数,再按需求排序:

exports.article_list = function (req, res, next) {
  getArticles(function (err, list_articles) {
    if (err) {
      return next(err);
    }
    // 按标题正序排序,满足原页面展示需求
    const sortedByTitle = list_articles.sort((a, b) => a.title.localeCompare(b.title));
    res.render("article_list", {
      title: "Article List",
      article_list: sortedByTitle,
    });
  });
};

3. 处理首页路由,传递最新文章数据

给首页路由添加数据查询逻辑,把需要的文章数据传给模板:

// 假设首页路由在对应控制器文件中
exports.index = function (req, res, next) {
  getArticles(function (err, list_articles) {
    if (err) {
      return next(err);
    }
    // 取最新的一篇文章(已倒序,直接取第一个元素)
    const latestArticle = list_articles[0];
    res.render("index", {
      title: "首页",
      latest_article: latestArticle, // 单独传递最新文章
      // 若需展示多篇,可传 article_list: list_articles.slice(0, 3) 取前3篇
    });
  });
};

4. 修正首页EJS模板代码

如果传递的是单独的latest_article,模板中这样写:

<!-- index.ejs 最新文章板块 -->
<div class="latest-article-section">
  <h3>最新文章</h3>
  <% if (latest_article) { %>
    <h4><%= latest_article.title %></h4>
    <p><%= latest_article.content %></p>
  <% } else { %>
    <p>暂无已发布文章</p>
  <% } %>
</div>

如果传递的是完整article_list,取最新内容的写法:

<% if (article_list && article_list.length > 0) { %>
  <p><%= article_list[0].content %></p>
<% } %>

额外提示

  • 小博客场景下,每次请求查询数据库完全够用;如果后续流量增大,可引入Redis缓存查询结果优化性能
  • 确保所有用到Article模型的路由文件都已正确引入模型

内容的提问来源于stack exchange,提问作者Dagger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:17:28