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

保存文件时触发ENOENT错误:本地及部署后如何修复?

Node.js保存JSON文件时出现ENOENT错误的解决方案

问题代码

用户的保存文件代码如下:

saveFile = (i, data) => {
  var filename = `${i}_may.json`;
  var folder_list = ["desktop", "data", filename];
  var dir = ".";
  folder_list.forEach(function (x, i) {
    dir = require("path").join(dir, `${x}`);
    if (!fs.existsSync(dir)) {
      fs.writeFileSync(dir, JSON.stringify(data));
    }
  });
};

报错信息

运行时持续抛出以下错误:

Error: ENOENT: no such file or directory, open 'desktop\data'

  errno: -4058,
  syscall: 'open',
  code: 'ENOENT',
  path: 'desktop\\data'

用户确认系统桌面存在data文件夹,但代码无法识别,需要实现本地和部署环境都能正常运行的逻辑。


问题根源

  1. 路径指向错误:代码中使用相对路径./desktop/data,指向的是当前工作目录下的文件夹,而非用户系统桌面的文件夹,两者路径完全不同。
  2. 文件夹与文件创建逻辑混淆:fs.writeFileSync是用于创建并写入文件的API,不能用来创建文件夹。循环中把desktop、data这些文件夹路径当成文件去写入,直接触发ENOENT错误。
  3. 未区分部署环境:服务器部署环境不存在“桌面”概念,硬编码桌面路径会导致路径完全无效。

修正方案

1. 区分环境配置路径

  • 本地开发时,通过os.homedir()获取用户主目录,拼接系统桌面的目标文件夹路径,跨Windows/macOS/Linux都能生效。
  • 部署环境(生产环境)时,使用项目根目录下的专用数据文件夹,避免依赖本地桌面路径。

2. 修复目录与文件创建逻辑

  • 使用fs.mkdirSync并添加{ recursive: true }参数,递归创建多级文件夹,无需手动逐个创建目录层级。
  • 分离文件夹创建与文件写入逻辑,避免将文件夹路径当成文件处理。

修正后的代码

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

const saveFile = (i, data) => {
  const filename = `${i}_may.json`;
  let targetDir;

  // 根据环境变量区分本地开发与部署环境
  if (process.env.NODE_ENV === 'production') {
    // 部署环境:项目根目录下的data文件夹
    targetDir = path.join(__dirname, 'data');
  } else {
    // 本地开发:用户桌面的data文件夹
    targetDir = path.join(os.homedir(), 'Desktop', 'data');
  }

  // 递归创建目标文件夹(如果不存在)
  if (!fs.existsSync(targetDir)) {
    fs.mkdirSync(targetDir, { recursive: true });
  }

  // 拼接最终文件路径并写入
  const filePath = path.join(targetDir, filename);
  fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
};

额外注意事项

  • 权限问题:部署时要确保目标文件夹(如项目的data文件夹)有写入权限,否则会抛出权限错误。
  • 异步优化:如果是网站服务场景,建议使用fs.promises的异步API(mkdir、writeFile)替代同步方法,避免阻塞Node.js事件循环,提升服务性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:52:26