Почему не перезаписывается значение переменной при повторном вызове функции? 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 научитесь использовать асинхронные функции и СУБД, рано или поздно это пригодится