首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express/Node的奇怪(缓存)问题

Express/Node的奇怪(缓存)问题
EN

Stack Overflow用户
提问于 2016-04-24 02:09:53
回答 1查看 95关注 0票数 0

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

The GET

代码语言:javascript
复制
router.get('/concerts', function (request, response) {
    delete require.cache[require.resolve('../database/data.json')];
    var db = require('../database/data.json');
    response.send(db.concerts);
});

The POST

代码语言:javascript
复制
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。任何线索或建议都非常感谢,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-04-24 23:30:43

解决方案:不使用本地文件在云中存储数据!这就是数据库的用途!

到底是什么问题呢?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36814580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档