Express/Node的奇怪(缓存)问题
Weird (caching) issue with Express/Node
我已经构建了一个在谷歌云中运行的angular/express/node应用程序,该应用程序目前使用JSON文件作为我的应用程序的数据源。出于某种原因,(这只发生在云中)通过 ajax 调用保存数据并将其写入 json 文件时,一切似乎都正常。但是,在刷新页面时,服务器(有时!)会在编辑之前向我发送版本。我无法判断这是否是与 Express、节点相关甚至与角度相关的问题,但我可以肯定的是,我正在检查来自服务器的响应中的 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 + '');
});
这可能没有说太多,所以如果有人有兴趣提供帮助,你可以在这里看到这个问题。如果您单击第一场音乐会的modify
并将programme
更改为类似asd
的内容,然后保存,则一切看起来都很好。但是,如果您尝试刷新页面几次(通常甚至需要多达 6-7 次尝试),则会显示旧的、未更改的programme
。任何线索或建议非常感谢,谢谢。
解决方法:不要使用本地文件将数据存储在云中!这就是数据库的用途!
问题到底出在哪里?
该问题是由于应用程序引擎为我的应用程序运行了 2 个虚拟机实例。这导致 POST 请求发送到一个实例,它完成了它的工作,通过修改其本地 JSON 文件保存了数据,并返回了 200。但是,在几次刷新后,负载平衡会导致 GET 到达另一台计算机,该计算机具有其单独的源代码,包括初始的、未修改的 JSON。我现在正在使用MongoDB实例,一切似乎都解决了。希望这能阻止那些试图做我做过同样事情的人。
相关文章:
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- jQuery选择器缓存问题
- Node.js/Socket.io适用于除Firefox之外的所有应用程序,这可能是缓存问题
- 将部分视图加载到JQuery对话框中的缓存问题
- 我的网站存在火狐缓存问题
- 禁用 Internet Explorer 8 jQuery 中的缓存问题
- IE7中的JS +缓存问题
- 浏览器中的 Ajax 缓存问题
- $('#textboxId').val() 返回旧值(浏览器缓存问题)
- Gulp Angular 构建模板缓存问题
- Javascript文件缓存问题
- 第二页加载时出现Safari缓存问题
- 如何调试IE9JQueryAJAX缓存问题
- karma+typescript+SystemJS——缓存问题
- IE9浏览器缓存问题
- IE中的浏览器缓存问题
- GAE java缓存问题
- webpack开发服务器的缓存问题
- Javascript最小化缓存问题
- Rails / jQuery / Modal forms -缓存问题?有时它们就停止工作了