2016-04-23 11 views
0

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が表示されます。どんな手掛かりやアドバイスをいただければ幸いです。

答えて

0

解決するにはクラウドにデータを保存するためにローカルファイルを使用しないでください!これがデータベースの目的です!

実際には何が問題でしたか?

この問題は、App Engineに2つのVMインスタンスがアプリケーション用に実行されていたことが原因です。これによりPOST要求が1つのインスタンスに送信され、ジョブが実行され、ローカルのJSONファイルを変更してデータを保存し、200が返されました。ただし、数回のリフレッシュ後、ロードバランシングによってGETがもう一方のマシンには、変更されていない初期のJSONを含む個々のソースコードがあります。私は現在、MongoDBインスタンスを使用しており、すべてが解決されているようです。うまくいけば、これは私がしたのと同じことをやろうとしている人を嫌うものです。

関連する問題