Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在NODE.JS中重新加载变量值_Javascript_Json_Node.js_Express - Fatal编程技术网

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

Javascript 在NODE.JS中重新加载变量值,javascript,json,node.js,express,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.RTPPMDa

我终于意识到,这一次我需要动用“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");
});
这是一个非常精简的最终代码版本,但还有更多的app.get,而不仅仅是时间戳

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

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

如何使PPM的值每30秒重新加载一次(甚至使用fs.watchfile更改文件PPM.json),而不重新加载服务器


提前感谢

setInterval
回调中删除
pmm
之前的
var
一词。您已经创建了一个本地
pmm
变量,而不是在想要修改的范围内修改
pmm
变量


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

我所要做的就是删除变量。。。当然我以前试过,但显然没有。现在工作很愉快。非常感谢