You need to enable JavaScript to run this app. Node.js开发Discord.js机器人时函数首次调用后ticketValue值不更新
优惠活动
大模型
产品
解决方案
定价
更多

Node.js开发Discord.js机器人时函数首次调用后ticketValue值不更新

问题根因
  1. Node.js的require机制存在模块缓存,首次导入JSON文件后,后续再次调用require同路径文件会直接返回缓存的旧数据,不会重新读取磁盘上的最新文件内容。
  2. fs.writeFile是异步API,调用写入后立即执行读取操作时,写入操作大概率还未完成,磁盘文件尚未更新,读到的自然是旧值。
  3. 路径不一致:读取JSON时用的相对路径是../ticketNum.json,写入时用的是./ticketNum.json,两个路径指向的不是同一个文件,写入操作实际修改的不是你读取的那个JSON文件,自然读取不到更新后的值。
修复方案
  • 弃用require读取JSON,改用fs.readFileSync读取文件内容后手动JSON.parse,绕开模块缓存。
  • 统一文件路径,使用path.resolve生成绝对路径,避免相对路径受执行目录影响出错。
  • 写入操作改用同步APIfs.writeFileSync,保证写入完成后再执行后续逻辑。
修正后代码
const fs = require("fs");
const path = require("path");
// 统一JSON文件的绝对路径,避免相对路径混乱
const jsonPath = path.resolve(__dirname, "../ticketNum.json");

module.exports = {
    commands: ["ticket"],
    minArgs: 1,
    expectedArgs: "<message>",

    callback: (message, arguments, text) => {
      console.log("FUNCTION RUN")

      // 改用fs读取+JSON.parse绕开require缓存
      const jsonContent = fs.readFileSync(jsonPath, "utf-8");
      const jsondata = JSON.parse(jsonContent);
      let ticketValue = jsondata.reportNews.toString()

      // 补四位零可以用更简洁的padStart方法,等价于你原来的for循环
      ticketValue = ticketValue.padStart(4, '0');
      console.log(`#1 ${ticketValue}`)

      // 创建Discord频道
      message.guild.channels.create(`report-incident-${ticketValue}`, {
          type: 'text',
          permissionOverwrites: [
             {
               id: message.author.id,
               deny: ['VIEW_CHANNEL'],
            },
          ],
        })

        // ticket值加1
        const newTicketValue = Number(ticketValue) + 1
        console.log(`TICKET VALUE = ${newTicketValue}`)
        // 改用同步写入,保证写入完成后再执行后续读取
        fs.writeFileSync(jsonPath, JSON.stringify({"reportNews": newTicketValue}))
        console.log(`Done writing, value = ${newTicketValue}`)

        // 读取最新值验证
        const newJsonContent = fs.readFileSync(jsonPath, "utf-8");
        console.log(JSON.parse(newJsonContent).reportNews.toString())
    },
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 20:45:04