Я создал приложение углового/экспресс-узла, которое работает в облаке Google, которое в настоящее время использует файл 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
. Любые подсказки или советы очень ценятся, спасибо.
Чтобы решить: не используйте локальные файлы для хранения данных в облаке! Для этого нужны базы данных!
В чем проблема?
Проблема была вызвана тем, что в App Engine было задействовано 2 экземпляра VM для моего приложения. Это вызвало отправку запроса POST в один экземпляр, выполнение его работы, сохранение данных путем изменения его локального файла JSON и возврат 200. Однако после нескольких обновлений балансировка нагрузки заставляет GET прибыть на другую машина, которая имеет свой собственный исходный код, включая исходный, немодифицированный JSON. Теперь я использую экземпляр MongoDB, и все, кажется, решено. Надеюсь, это препятствует людям, которые пытаются сделать то же самое, что и я.