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

ExpressJS写入文件后无法获取新数据问题求助

问题原因

Node.js 的 require 机制会缓存已加载的模块文件(包括 JSON 文件)。第一次调用 require("./name.json") 时,文件内容会被存入缓存,后续即使文件内容修改,require 也直接返回缓存里的旧数据,只有重启服务器才会重新读取文件。你禁用 etag 无效,是因为这是服务端模块缓存的问题,和客户端静态文件缓存无关。

解决方案

方案一:使用 fs 模块实时读取文件(推荐)

放弃用 require 加载 JSON,每次请求时通过 fs.readFile 读取最新的文件内容:

const fs = require('fs');
const path = require('path');

// 示例获取接口
app.get('/api/get-name-data', (req, res) => {
  const jsonPath = path.join(__dirname, 'name.json');
  fs.readFile(jsonPath, 'utf8', (err, rawData) => {
    if (err) {
      console.error(err);
      return res.status(500).send('读取文件失败');
    }
    try {
      const fileData = JSON.parse(rawData);
      res.json(fileData);
    } catch (parseErr) {
      console.error(parseErr);
      res.status(500).send('文件内容不是合法JSON');
    }
  });
});

方案二:清除模块缓存后重新 require(不推荐)

如果一定要用 require,可以每次请求时先清除该文件的缓存,再重新加载:

// 示例获取接口
app.get('/api/get-name-data', (req, res) => {
  const modulePath = require.resolve('./name.json');
  // 删除对应模块的缓存
  delete require.cache[modulePath];
  // 重新加载文件
  const fileData = require('./name.json');
  res.json(fileData);
});

注意:这种方式会破坏 Node.js 的模块缓存机制,频繁调用可能影响性能,不建议在高并发场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:00:39