Проблема Angular CORS - Опрос конечной точки каждые 5 секунд - PullRequest
0 голосов
/ 24 августа 2018

У меня есть угловое приложение, которое запрашивает конечную точку узла / экспресс-сервера каждые 5 секунд.Однако иногда я получаю ошибку cors.

Usecase

  1. Пользователь создает транзакцию.Транзакция добавляется в базу данных со статусом «Ожидание»
  2. Интерфейс периодически запрашивает базу данных, пока статус не будет обновлен до «Завершено».Таким образом, он может получить результаты.

Angular

Каждые 5 секунд я выполняю запрос http http

   const url = 'https://<removed>.com/api/v1/transactions/' + transactionId;

    interval(5000)
        .pipe(
            switchMap(() => this.httpClient.get(url)),
            tap((response: any) => {
                this.summary = response;
            }),
            takeWhile((response: any) => response.data['status'] !== 'Completed'),
    ).subscribe();

}

Первыйзапрос в порядке, то я получаю следующую ошибку при следующем запросе.

Не удалось загрузить https://"".com/api/v1/transactions/f3debad2-a830-4168-9a03-475389dae7e0: Нет заголовка 'Access-Control-Allow-Origin' в запрашиваемом ресурсе.Происхождение 'http://localhost:4200' поэтому не разрешено.Ответ имеет HTTP-код состояния 502.

Блокировка перекрестного чтения (CORB) заблокировала ответ перекрестного происхождения https://"".com/api/v1/transactions/f3debad2-a830-4168-9a03-475389dae7e0 с типом MIME text / html.См. https://www.chromestatus.com/feature/5629709824032768 для получения более подробной информации.

Опять же, это случается иногда, иногда я могу сделать столько запросов, сколько мне нужно, с 200 ответами.

Узел

Я установил CORS в своем бэкэнде.

  app.use(cors());

Примечание

Я не уверен, что это полная сторона серверавопрос.Это случайный крайний случай.Все остальные мои запросы к API, включая запросы POST, работают нормально.

Infact, прежде чем запустить интервал в 5 секунд, чтобы проверить, готовы ли результаты, отправляет сообщения в конечную точку в том же домене, без проблем.

Я сделал 10 тестовых случаев, каждый тест будет запрашивать конечную точку 3-4 раза (обычно это занимает много времени, прежде чем результаты будут готовы / завершены).Все 10 тестов могут быть хорошими, тогда как 11-й может иметь эту проблему.

1 Ответ

0 голосов
/ 24 августа 2018
app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  res.setHeader('Access-Control-Expose-Headers','Content-Type,expire');
 next();
});

Попробуйте это на своем сервере. Если вы хотите передать дополнительный параметр заголовка, вам нужно добавить эти переменные в res.setHeader('Access-Control-Allow-Headers', 'Content-Type , token');, но помните, что не user '-' в имени переменной.

...