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

Node.js中点击Continue Reading后,如何确定blog.ejs显示的博客文章

解决Node.js博客单页无法区分文章的问题

先说说你之前方法的问题

  1. GET 请求没有 req.body,req.body 是用来接收 POST 请求提交的数据的,所以你用 req.body["h3"].innerHTML 根本拿不到数据。
  2. 前端没法直接把页面元素的内容通过 GET 请求的 body 传递给后端,这种思路本身就行不通。

正确解决方案(无数据库版)

因为你还没用到数据库,先通过模拟博客数据+URL参数来实现区分文章的功能,步骤如下:

1. 在index.js里模拟博客数据

先定义一个存储博客的数组,把所有文章的标题、内容都存在这里:

// 模拟博客数据,后续可以替换成数据库查询
const blogPosts = [
  {
    title: "我的第一篇博客",
    content: "这是我用Node.js+Bootstrap搭建的第一篇博客,记录学习心得..."
  },
  {
    title: "Node.js路由入门",
    content: "路由是Node.js服务端的核心概念,用来处理不同URL的请求..."
  },
  // 可以继续添加更多文章
];

// 确保welcome页面能拿到这些数据,渲染文章列表
app.get("/", (req, res) => {
  res.render("welcome.ejs", { posts: blogPosts });
});

2. 修改welcome.ejs的链接,传递文章标识

给每个"Continue reading"链接加上文章标题(或者唯一id)作为URL参数,这里用路由参数的方式(更友好的URL),记得用encodeURIComponent处理特殊字符:

<!-- 假设你在welcome.ejs里用循环渲染文章列表 -->
<% posts.forEach(post => { %>
  <div class="blog-post">
    <h3><%= post.title %></h3>
    <!-- 其他文章摘要内容 -->
    <a href="/blogs/<%= encodeURIComponent(post.title) %>" class="btn btn-primary">Continue reading</a>
  </div>
<% }) %>

3. 修改index.js的博客详情路由

修改路由,通过req.params获取传递的标题,然后从模拟数据里找到对应的文章:

app.get("/blogs/:title", (req, res) => {
  // 解码URL里的标题
  const postTitle = decodeURIComponent(req.params.title);
  // 从模拟数据里找到对应文章
  const foundPost = blogPosts.find(post => post.title === postTitle);
  
  // 渲染blog.ejs,把找到的文章传过去
  if (foundPost) {
    res.render("blog.ejs", { post: foundPost });
  } else {
    // 如果没找到文章,返回404提示
    res.render("blog.ejs", { post: { title: "文章不存在", content: "抱歉,找不到你要的文章" } });
  }
});

4. 修改blog.ejs显示对应文章内容

直接使用传递过来的文章数据渲染即可:

<div class="blog-detail">
  <h2><%= post.title %></h2>
  <p><%= post.content %></p>
</div>

补充说明

如果觉得用标题当标识容易重复,也可以给每篇文章加唯一的id字段(比如id: 1、id:2),然后传递id作为路由参数,查找的时候用post.id === parseInt(req.params.id),这样更可靠。后续接入数据库后,只需要把模拟数据替换成数据库查询语句即可,逻辑基本一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:12:30