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

Posted

技术标签:

【中文标题】所需的 JSON 文件具有运行程序之前的旧值【英文标题】:Required JSON file has old values from before running the program 【发布时间】:2021-06-01 07:02:50 【问题描述】:

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

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

我执行以下步骤:

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

所以现在在第一次记录之后(也就是发送第一条消息),我在启动机器人之前获得了 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))
);

我希望代码有帮助:)

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

感谢您的帮助

【问题讨论】:

我强烈建议不要使用 JSON 来保存用户数据,它会经常擦除自己并且不稳定。我强烈推荐使用 SQL 或 MongoDB @JoeMoore 是的,我知道这不是最好的解决方案 :( 嗯非常好!如果你愿意,我可以加你,当我有任何问题时,我会问你。但首先我会尝试自己进入它,以免浪费您的时间 当然,很乐意提供帮助 - 我的不和谐在我的个人资料中 【参考方案1】:

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

【讨论】:

以上是关于所需的 JSON 文件具有运行程序之前的旧值的主要内容,如果未能解决你的问题,请参考以下文章

java中如何计算一个程序运行所需的最少时间,最多时间和平均时间?

从程序集中获取所需的运行时版本

尽管注释掉了所需的头文件,为啥这个 C++ 程序仍能编译和运行? [复制]

具有父子关系的 2 个实体的 GraphQL 突变返回第二个实体的旧值

在更改之前获取输入的旧值并将总值更改为 + 或 -

计算机中执行程序所需的时钟周期数和执行时间的区别是啥