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

Discord.js中fs.writeFile未正确更新目标data.json文件求助

解决Discord.js机器人写入data.json路径错误的问题

问题根源

你碰到的核心问题是Node.js文件操作的路径解析规则:fs.writeFile用的相对路径是基于你启动机器人时的工作目录(也就是项目根目录),而不是index.js所在的src文件夹。

  • 用require('./data.json')时,Node.js会相对于当前脚本文件(src/index.js)查找,所以能正确加载src/data.json;
  • 但fs.writeFile('./data.json')会在项目根目录生成新文件,根本没去修改src里的原文件。

解决方案

用Node.js内置的__dirname变量或path模块构建绝对路径,让读写操作精准指向src/data.json。

推荐方案:用__dirname拼接路径

__dirname是Node.js自带的全局变量,代表当前脚本所在目录的绝对路径,修改代码如下:

require('dotenv').config();
const { Client, IntentsBitField } = require('discord.js');
const fs = require('fs');
const path = require('path');

// 拼接出src目录下data.json的绝对路径
const dataFileName = path.join(__dirname, 'data.json');
const data = require(dataFileName);

// ...客户端初始化代码

client.on('ready', (c) => {
  console.log(`✅ ${c.user.tag} is online.`);

  console.log(data);
  data.modCreationId = "new value";

  fs.writeFile(dataFileName, JSON.stringify(data, null, 2), (err) => {
    if (err) return console.log(err);
    console.log(JSON.stringify(data, null, 2));
  });
});

client.login(process.env.DISCORD_TOKEN);

备选方案:直接指定相对根目录的路径

如果你确定项目结构不会变动,也可以直接写./src/data.json,但这种方式灵活性差,项目移动后容易出错:

const dataFileName = './src/data.json';

额外提示

  • 如果有多处修改data.json的逻辑,建议每次写入后重新读取文件,避免内存数据和文件内容不一致;
  • 可以改用fs.promises.writeFile的Promise异步写法,让代码更贴合现代JS风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:56:12