当前使用 setInterval 在 nodejs 中反映来自 json 的动态数据的方法

Current approach to reflect dynamic data from json in nodejs using setInterval

我正在尝试开发一个 MERN 堆栈应用程序,并且我在这方面做了很多尝试。所以,我想要实现的是从 api 中提取一些数据并将其转储到数据库中,然后从数据库中查询以每 5 分钟创建一个 JSON 文件(使用 jenkins 和python,我能想到的最好的方法)。下面是我正在实施的一种方法,但它不起作用。如果我删除 setInterval() 函数并取消对回调函数的注释,代码可以运行但不会更新数据。

const express = require('express');
const fs = require('fs');
const app = express();

// Read JSON File
function readJSON(callback) {
    fs.readFile('./name.json', "utf8", function(err, result) {
        if (err) callback (err);
        callback(JSON.parse(result));
    });
}

// Process JSON File during callback
// readJSON(function(res) {
//     app.get('/api/customers', (request, response) => {
//         response.json(res);
//     });
// });

// Attempt to run every 5 minutes
setInterval(readJSON(function(res) {
    app.get('/api/customers', (request, response) => {
        response.json(res);
})}, 60000 * 5); // 5 Minutes

const port = 5000

app.listen(port, () => `Server running on port ${port}`);

想过用socket,但是不想实时,只能在一个时间间隔内直播数据。我认为 Restful API 也不适合这里,我不希望与 modify/update 数据进行双向通信。如果我的方法不好,请告诉我您为什么要选择另一种方法。我只是想在全栈网络开发中建立基础。谢谢!

逻辑代码为:

在服务器端:

function readJSON(callback) {
    fs.readFile('./name.json', "utf8", function(err, result) {
        if (err) callback(err);
        callback(null, JSON.parse(result));
    });
}

app.get('/api/customers', (request, response) => {
    readJSON((err, nameContent) => {
        if(err) {
            response.status(500).send(err);
        }
        response.send(nameContent);
    })
});

并且在客户端每 5 分钟请求一次数据:

someAjaxMethod('/api/customers', (err, nameContent) => console.log(err, nameContent));