在NODE.JS中重新加载变量值

MOL*_*ign 2 javascript json node.js express

我终于意识到我需要在这个上面输入大的'StackOverflow'枪.这是我的代码,因为这个修复程序继续躲避我

var express = require('express'),
    fs = require('fs'),
    http = require('http');

var ppm = JSON.parse(fs.readFileSync('./data/ppm.json', 'utf8'));

var timestamp = {"timestamp" : ppm.RTPPMDataMsgV1.timestamp };

var app = express()
    .use(express.bodyParser())
    .use(express.static('public'));

app.all('/', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

app.get('/ppm/timestamp', function (req, res) {
    res.send(timestamp);
});

app.get('/*', function (req, res) {
    res.json(404, {status: 'not found'});
});

http.createServer(app).listen(3000, function () {

    setInterval(function(){
        var ppm = JSON.parse(fs.readFileSync('./data/ppm.json', 'utf8'));
        var timestamp = {"timestamp" : ppm.RTPPMDataMsgV1.timestamp };
        console.log("File changed");
    }, 30000);

    console.log("Server ready at http://localhost:3000");
});
Run Code Online (Sandbox Code Playgroud)

这是最终代码的精简版本,但app.get不仅仅是时间戳.

ppm.json文件每隔30秒由一个单独的节点程序更新,但我可以让这个节点使用新文件的唯一方法是停止并启动服务器,这是不可接受的.

我曾经做过ppm = require('./ data/ppm.json),但由于缓存而移除了这个并转移到这种加载JSON的新方法但没有成功.我怀疑应用程序也在缓存,因此..再次..我需要重新启动服务器以获取新值

如何在不重新加载服务器的情况下每30秒重新加载PPM的值(甚至在使用fs.watchfile更改文件ppm.json时).

提前致谢

Pau*_*aul 5

在回调中删除var之前的单词.您已经创建了一个局部变量,而不是修改您想要的范围内的变量.pmmsetIntervalpmmpmm

您还应该避免同步版本fs.readFile,以便您的服务器可以在IO发生时响应请求.