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

如何在Express.js中无需数据库实现博客文章的存储与页面展示?

无数据库环境下博客文章持久化的实现方案

一、内存临时存储(快速实现,仅适合开发调试)

当前代码每次提交只传递单篇文章,且没有持久化存储,刷新页面自然丢失数据。最简单的临时解决方式是在全局维护一个数组保存所有文章:

  1. 在Express应用初始化时定义全局数组:
// 全局存储文章,Node服务重启后数据会清空
let articles = [];
  1. 修改POST路由,把新文章加入数组后再渲染所有内容:
app.post("/submit", (req, res) => {
  const newArticle = req.body.post;
  // 简单校验非空内容
  if (newArticle?.trim()) {
    articles.push(newArticle);
  }
  // 渲染时传入全部文章
  res.render("index.ejs", { data: articles });
});
  1. 补充GET首页路由,确保刷新页面能加载所有已存文章:
app.get("/", (req, res) => {
  res.render("index.ejs", { data: articles });
});

缺点:Node服务重启后所有数据会丢失,仅适合开发阶段快速验证功能。

二、JSON文件持久化存储(生产可用,重启不丢失数据)

如果需要数据真正持久化,可将文章写入本地JSON文件,启动时读取、提交时更新:

  1. 项目根目录创建articles.json文件,初始内容为:
[]
  1. 封装文件读写的异步工具函数(避免阻塞服务):
const fs = require('fs').promises;
const path = require('path');

// 读取所有文章
async function getArticles() {
  try {
    const filePath = path.join(__dirname, 'articles.json');
    const fileContent = await fs.readFile(filePath, 'utf8');
    return JSON.parse(fileContent);
  } catch (err) {
    console.error('读取文章文件失败:', err);
    return [];
  }
}

// 保存新文章
async function saveNewArticle(article) {
  try {
    const articles = await getArticles();
    articles.push(article);
    const filePath = path.join(__dirname, 'articles.json');
    // 格式化写入,方便查看
    await fs.writeFile(filePath, JSON.stringify(articles, null, 2));
  } catch (err) {
    console.error('保存文章失败:', err);
  }
}
  1. 修改路由逻辑,结合工具函数实现持久化:
// 确保已配置body-parser解析表单数据
app.use(express.urlencoded({ extended: true }));

app.get("/", async (req, res) => {
  const articles = await getArticles();
  res.render("index.ejs", { data: articles });
});

app.post("/submit", async (req, res) => {
  const newArticle = req.body.post;
  if (newArticle?.trim()) {
    await saveNewArticle(newArticle);
  }
  const articles = await getArticles();
  res.render("index.ejs", { data: articles });
});

优点:数据持久化存储,服务重启后不会丢失,满足小型博客的无数据库需求。

三、其他可选方案

  • 前端LocalStorage存储:把文章存在用户浏览器的LocalStorage中,页面刷新时从本地读取渲染。但数据仅存在当前用户浏览器,无法实现多用户共享,适合个人离线博客场景。
  • CSV/TXT文件存储:原理和JSON文件一致,只是读写时需要对应格式的解析逻辑,适合有特定格式需求的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:56:05