Почему не перезаписывается значение переменной при повторном вызове функции? JS

Пишу своего бота для дискорда, после первого вызова команды переменная "userjoincd" не меняет своё значение. Вот код:

function test(robot, msg, args, userID, serverID, msgdate) {
    const user = require(`./serversdata/${serverID}/usersdata/${userID}.json`);
    let userjoincd = user.jobjoincd;
    let usermoney = user.money;
    let userworkcd = user.workcd;
    let userres = user.resuser;
    let time = msgdate - userjoincd;
    const data = {
        money: usermoney,
        job: `Лесоруб`,
        jobjoincd: msgdate,
        workcd: userworkcd,
        resuser: userres,
    };
    fs.writeFileSync(`./serversdata/${serverID}/usersdata/${userID}.json`, JSON.stringify(data));
    console.log(msgdate);
    console.log(userjoincd);
    console.log(time);
}

Есть идеи?


Ответы (1 шт):

Автор решения: Pavel Mayorov

Потому что вы читаете файл через require.

Вызов require - это не просто чтение файла, это чтение модуля. Любой модуль после загрузки навечно запоминается в кеше модулей, и повторные вызовы require просто достают его оттуда.

Соответственно, выхода тут два. Первый - читать файл теми способами, которые предназначены для чтения именно файлов:

const user = JSON.parse(fs.readFileSync(`./serversdata/${serverID}/usersdata/${userID}.json`));

Второй способ - менять глобальный объект при записи в файл:

Object.assign(user, {
    job: `Лесоруб`,
    jobjoincd: msgdate,
});
fs.writeFileSync(`./serversdata/${serverID}/usersdata/${userID}.json`, JSON.stringify(user));

PS научитесь использовать асинхронные функции и СУБД, рано или поздно это пригодится

→ Ссылка