Google Cloudで動作する角度/エクスプレス/ノードアプリケーションを作成しました。現在、自分のアプリケーションのデータソースとして機能するJSONファイルを使用しています。何らかの理由で(これはクラウドでのみ起こります)、ajax呼び出しでデータを保存してjsonファイルに書き込むと、すべて正常に動作しているようです。しかし、ページをリフレッシュすると、サーバ(時には!)が編集前のバージョンを私に送ります。エクスプレス関連、ノード関連、角度関連の問題かどうかはわかりませんが、確かにわかっていることは、サーバーからの応答に含まれるJSONをチェックしていることです場合によっては変更されたバージョンであることもありますが、そうでない場合もあります。Express/Nodeで奇妙な(キャッシュ)問題が発生しました
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
をクリックしてをasd
のように変更して保存すると、すべてが正常に見えます。しかし、ページを数回リフレッシュしようとすると(通常は最大6-7回の試行が必要です)、古い、変更されていないprogramme
が表示されます。どんな手掛かりやアドバイスをいただければ幸いです。