NodeJS JSON中的变量已更改,但索引,js输出旧的

dy1byipe  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(124)
interval = setInterval(function() {
  online = require("./../../server/oxide/data/online.json");
  if (online.ONLINE == -1)
  {
    client.user.setStatus(`dnd`);
    client.user.setActivity("server offline");
  }
  else if (online.ONLINE == 0)
  {
    client.user.setStatus(`idle`);
    client.user.setActivity("no one");
  }
  else
  {
    client.user.setStatus(`online`);
    client.user.setActivity(`Players ${online.ONLINE}/500`);
  }
  console.log(`update ${online.ONLINE}`)
}, 10000);

每10秒在线在线更新
index.js只在我重新启动js文件时才改变变量,但我不能重新启动它。可以帮助SMB PLS

pkmbmrz7

pkmbmrz71#

在Node.js中,require在第一次被调用后会被缓存,因此每次调用它都不会再次从文件中读取。(来源:https://nodejs.org/API/modules.html#modules_caching)
为了解决这个问题,你可以使用其他节点。js函数如fs.readFileSync方法读取文件raw每次需要从JSON文件读取时,示例如下:

const fs = require('fs');

interval = setInterval(function () {
  const raw = fs.readFileSync('./../../server/oxide/data/online.json', 'utf-8');
  online = JSON.parse(raw);

  if (online.ONLINE == -1) {
    client.user.setStatus(`dnd`);
    client.user.setActivity('server offline');
  } else if (online.ONLINE == 0) {
    client.user.setStatus(`idle`);
    client.user.setActivity('no one');
  } else {
    client.user.setStatus(`online`);
    client.user.setActivity(`Players ${online.ONLINE}/500`);
  }
  console.log(`update ${online.ONLINE}`);
}, 10000);

(The fs.readFileSync的第一个参数是文件的路径,而第二个参数是编码。在大多数情况下使用utf-8非常重要,以确保它支持JSON文件中可能存在的所有不同的文本编码/语言)

相关问题