2017-01-30 5 views
1

Я новичок в угловом и имел проблемы с сервисом, который всегда работал, пока он этого не сделал. Мой сервис имеет следующий вызов.

this.getForms = function() { 
    return $http.get("/forms"). 
    then(function(response) { 
     return response; 
    }, function(response) { 
     alert("Error finding forms."); 
    }); 
}; 

Когда страница обновляется (сафари) getForms это стало началом, $ http.get называется, мой сервер Node.js/Экспресс формирует конечную точку возвращает данные формы правильно.

app.get("/forms", function (req, res) { 
    Form.find({}, function (err, docs) { 
     if (err) { 
      server.handleError(res, err.message, "Failed to get forms."); 
     } else { 
      res.status(200).json(docs); 
     } 
    }); 
}); 

Но вместо JSON я получаю ошибку 304, которая указывает, что данные доступны в кеше. Но заголовок ответа 304 имеет пустую строку данных, поэтому он не возвращает никаких данных из кеша.

Мои вопросы

1) Почему мой сервер вызова, если данные доступны в кэше?

2) Как я могу сказать, чтобы не кэшировать этот вызов, чтобы страница могла корректно обновлять формы?

ответ

2

Редактировать: Похоже, может быть потенциальная проблема с Safari. См. Также этот пост. NodeJS/express: Cache and 304 status code

Возможно, вы неправильно понимаете, что означает код состояния 304. 304 не является ошибкой; это просто означает, что ресурс, который вы запрашиваете с сервера, не изменился. Ответ должен не содержать данные, поскольку он ожидает, что клиент будет кэшировать его где-то.

Например, веб-браузеры попытаются кэшировать изображение, чтобы сервер не отправлял его по сети снова, если пользователь перезагружает страницу или возвращается к ней позже. Однако браузеру нужен способ узнать, обновляется ли изображение или нет. Если сервер отправляет 304, браузер знает, что он может продолжать использовать копию в кеше.

В вашем случае следует реализовать какие-то кэширование, чтобы вернуть предыдущий ответ, если вы Получать 304. Кроме того, я полагаю, вы могли бы добавить эти заголовки в запрос, чтобы заставить его возвращать данные

Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0