【问题标题】:Reloading Variable value in NODE.JS在 NODE.JS 中重新加载变量值
【发布时间】:2014-02-12 17:41:36
【问题描述】:

我终于意识到我需要在这把大“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 秒重新加载一次(甚至在更改文件 ppm.json 时使用 fs.watchfile)。

提前致谢

【问题讨论】:

    标签: javascript json node.js express


    【解决方案1】:

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

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

    【讨论】:

    • 我所要做的就是放弃 VAR……当然我以前尝试过,但显然没有。现在工作很可爱。非常感谢
    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2021-06-15
    • 2016-07-07
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多