У меня есть угловое приложение, которое запрашивает конечную точку узла / экспресс-сервера каждые 5 секунд.Однако иногда я получаю ошибку cors.
Usecase
- Пользователь создает транзакцию.Транзакция добавляется в базу данных со статусом «Ожидание»
- Интерфейс периодически запрашивает базу данных, пока статус не будет обновлен до «Завершено».Таким образом, он может получить результаты.
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-й может иметь эту проблему.