所需 JSON 文件具有 运行 程序之前的旧值

Required JSON file has old values from before running the program

我正在使用 javascript (discord.js) 编写一个不和谐的机器人。

我使用 json 个文件来存储我的数据,当然总是需要最新的数据。

我执行以下步骤:

  1. 我启动了机器人
  2. 我运行一个函数,每次发送消息时都需要config.json文件
  3. 我增加了用户从他发送的消息中获得的 xp
  4. 我在config.json
  5. 更新用户xp
  6. 我记录数据

所以现在在第一次登录后(也就是发送第一条消息)我在启动机器人之前得到了 json 文件中的数据(有意义)。但是在发送第二条消息后,我希望 xp 值比之前更高,因为数据应该已经更新,文件新加载并再次记录数据。

(是的,我每次都更新文件。当我自己查看文件时,数据总是最新的)

那么第二次请求文件后没有更新的原因是什么?是否要求不重新加载文件?

这是我的代码:

function loadJson() {
    var jsonData = require("./config.json")
    //here I navigate through my json file and end up getting to the ... That won't be needed I guess :)
    return jsonData
}

//edits the xp of a user
function changeUserXP(receivedMessage) {
    let xpPerMessage = getJsonData(receivedMessage)["levelSystemInfo"].xpPerMessage
    jsonReader('./config.json', (err, data) => {
        if (err) {
            console.log('Error reading file:',err)
            return
        }
    //increase the users xp
    data.guilds[receivedMessage.guild.id].members[receivedMessage.author.id].xp += Number(xpPerMessage)
    data.guilds[receivedMessage.guild.id].members[receivedMessage.author.id].stats.messagesSent += 1
    fs.writeFile('./test_config.json', JSON.stringify(data, null, 4), (err) => {
        if (err) console.log('Error writing file:', err)
        })
    })
}

client.on("message", (receivedMessage) => {
    changeUserXP(receivedMessage)
    console.log(loadJson(receivedMessage))
});

希望代码对您有所帮助:)

如果我的问题不够准确或者您还有其他问题,请随时发表评论

感谢您的帮助<3

这是因为require()只读取文件一次并缓存它。为了再次读取同一个文件,你应该先从 require.cache

中删除它的键(键是文件的路径)