Javascript 在NODE.JS中重新加载变量值
我终于意识到,这一次我需要动用“StackOverflow”大炮。这是我的代码,因为我一直无法解决这个问题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
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发生时响应请求。我所要做的就是删除变量。。。当然我以前试过,但显然没有。现在工作很愉快。非常感谢