【问题标题】:Weird (caching) issue with Express/NodeExpress/Node 的奇怪(缓存)问题
【发布时间】:2016-08-17 07:26:06
【问题描述】:

我已经构建了一个在谷歌云中运行的 angular/express/node 应用程序,该应用程序当前使用一个 JSON 文件作为我的应用程序的数据源。出于某种原因,(这只发生在云中)当通过 ajax 调用保存数据并将其写入 json 文件时,一切似乎都正常。但是,刷新页面时,服务器(有时!)会向我发送编辑前的版本。我无法判断这是与 Express 相关、与 Node 相关还是与 Angular 相关的问题,但我可以肯定的是,我正在检查来自服务器的响应中的 JSON,它确实是有时是修改后的版本,有时不是,所以它很可能与角度缓存无关。

GET:

router.get('/concerts', function (request, response) {
    delete require.cache[require.resolve('../database/data.json')];
    var db = require('../database/data.json');
    response.send(db.concerts);
});

POST:

router.post('/concerts/save', function (request, response) {
    delete require.cache[require.resolve('../database/data.json')];
    var db = require('../database/data.json');
    var concert = request.body;
    console.log('Received concert id ' + concert.id + ' for saving.');
    if (concert.id != 0) {
        var indexOfItemToSave = db.concerts.map(function (e) {
            return e.id;
        }).indexOf(concert.id);
        if (indexOfItemToSave == -1) {
            console.log('Couldn\'t find concert with id ' + concert.id + 'in database!');
            response.sendStatus(404);
            return;
        }
        db.concerts[indexOfItemToSave] = concert;
    }
    else if (concert.id == 0) {
        concert.id = db.concerts[db.concerts.length - 1].id + 1;
        console.log('Concert id was 0, adding it with id ' + concert.id + '.');
        db.concerts.push(concert);
    }
    console.log("Added stuff to temporary db");
    var error = commit(db);
    if (error)
        response.send(error);
    else
        response.status(200).send(concert.id + '');
});

这可能没什么好说的,所以如果有人有兴趣提供帮助,您可以看到问题直播here。如果您为第一场音乐会点击modify 并将programme 更改为asd 之类的内容,然后保存,一切看起来都很好。但是,如果您尝试刷新页面几次(通常甚至需要 6-7 次尝试),则会显示旧的、未更改的 programme。非常感谢任何线索或建议,谢谢。

【问题讨论】:

    标签: javascript angularjs json node.js express


    【解决方案1】:

    解决:不要使用本地文件将数据存储在云端!这就是数据库的用途!

    真正的问题是什么?

    问题是由于 App Engine 为我的应用程序运行了 2 个 VM 实例这一事实引起的。这导致 POST 请求被发送到一个实例,它完成了它的工作,通过修改其本地 JSON 文件保存了数据,并返回了 200。但是,在几次刷新之后,负载平衡导致 GET 到达另一个机器,它有自己的源代码,包括初始的、未修改的 JSON。我现在正在使用 MongoDB 实例,一切似乎都解决了。希望这会阻止那些试图做与我相同的事情的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2013-01-11
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      相关资源
      最近更新 更多