如何在NodeJS运行时更新变量?

6psbrbz9  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(155)

我有一个基于本地JSON文件提供数据的API。我有另一个名为scrapeData的函数,计划在NodeJS中使用scheduledJob每分钟运行一次。此函数基于抓取的数据在本地更新本地JSON文件。
抓取完成后,我想知道如何更新包含JSON的全局变量,以便向用户提供更新的JSON文件。
下面的代码是我想出来的,但似乎它不工作,当涉及到更新现有的变量
我正在使用NodeJS和express,并希望在运行时更新变量。
index.js

// Local data files
let boyGroupJSON = require("./asset/boy-group.json");
let girlGroupJSON = require("./asset/girl-group.json");
let idolJSON = require("./asset/idol.json");

// Schedule Job for fetching data
const scheduledJob = schedule.scheduleJob("0 * * * * *", () => {
    scrapeData("boy-group");
    scrapeData("girl-group");
    scrapeData("idol");

    // Below variables are not updated :( 
    boyGroupJSON = JSON.parse(fs.readFileSync("./asset/boy-group.json"));
    girlGroupJSON = JSON.parse(fs.readFileSync("./asset/girl-group.json"));
    idolJSON = JSON.parse(fs.readFileSync("./asset/idol.json"));
});
bjg7j2ky

bjg7j2ky1#

事实证明,当使用require()时,NodeJS正在缓存文件。使用JSON.parse(fs.readFileSync("PATH"));代替。
下面是固定代码:

// Local data files
let boyGroupJSON = JSON.parse(fs.readFileSync("./asset/boy-group.json"));
let girlGroupJSON = JSON.parse(fs.readFileSync("./asset/girl-group.json"));
let idolJSON = JSON.parse(fs.readFileSync("./asset/idol.json"));

// Schedule Job for fetching data
const scheduledJob = schedule.scheduleJob("0 * * * * *", () => {
    scrapeData("boy-group");
    scrapeData("girl-group");
    scrapeData("idol");

    // Below variables are not updated :( 
    boyGroupJSON = JSON.parse(fs.readFileSync("./asset/boy-group.json"));
    girlGroupJSON = JSON.parse(fs.readFileSync("./asset/girl-group.json"));
    idolJSON = JSON.parse(fs.readFileSync("./asset/idol.json"));
});

相关问题