Angular 4: "Отказ об ошибке Http для (неизвестный URL): 0 Неизвестная ошибка"

Я пытаюсь использовать URL-адрес API. Я вызываю API с приведенным ниже кодом.

import {HttpClient, HttpClientModule, HttpParams} from "@angular/common/http";

@Injectable()
export class PropertyPrefService {

    constructor(private http: HttpClient,
                private configurationService:Configuration) {}

    public searchProjects(propFilter:string):any{
        let temp:any;
        const options = propFilter ?
        {
            params: new HttpParams().set('query', propFilter)
        } : {};

        return this.http.get<any>(this.configurationService.propertySystemApiUrl, options)
                    .subscribe((results:any) => {
                        console.log(results);
                    });
    }

В коде Angular я не получаю никакого ответа и получаю сообщение об ошибке:

Ответ об ошибке Http для (неизвестный url): 0 Неизвестная ошибка ".

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

URL-адрес "https://...", а не "http://...".

Ответ 1

Проблема заключается в Angular Universal, используемом Express, а безопасность проверяет SSL-сертификат на сервере; Я использовал самоподписанный сертификат SSL.

Решение состоит в том, чтобы добавить NODE_TLS_REJECT_UNAUTHORIZED=0 в вашу среду, чтобы отключить проверку SSL в Node.js. Вы должны установить это только в процессе разработки; в производстве очень рискованно.

Ответ 2

Вы не в том же домене, тот же протокол, тот же порт между бэкэнд и интерфейсом.

Ответ 3

Согласитесь с @StephanRauh и хотите добавить несколько баллов к своему. Это происходит, когда запрос не отправляется или по какой-то причине не может связаться с сервером.
Причины могут быть:

  1. Если подключение к Интернету очень медленное для подключения к серверу или вообще не доступно.
  2. Сам сервер не работает, т.е. нет обработчика для нашего запроса.

Ответ 4

Цитировать Sander Elias в группах Google:

"Ошибка 0 - это то, что вы получаете, когда запрос не отправляется. Наиболее распространенная причина этого заключается в том, что CORS неправильно настроен на сервере. Позвольте мне перефразировать это следующим образом: В 98% случаев это проблема на стороне сервера ".

Ответ 5

На тот случай, если кто-то еще наткнется на это, ни одно из этих решений не сработало для меня. Для меня работало отключение uBlock Origin. Он блокировал любой URL, на котором было слово "реклама" по понятным причинам.

Ответ 6

У меня была точно такая же проблема. Я смог увидеть результат в инструментах разработчика Chrome. Но я всегда получал сообщение об ошибке Http failure response for (unknown url): 0 Unknown Error.

В моем случае я использовал responseType:'text' для запроса полезной нагрузки text/html. Но по какой-то причине это не совместимо. Мне пришлось переключиться на responseType: 'blob' и использовать FileReader для преобразования blob в строку.

Итак, я думаю, у вас такая же проблема, когда возвращаемый контент не соответствует настроенному responseType. Кстати по умолчанию это json.

   this.httpClient.get(url, {responseType: 'blob'})
        .subscribe(data => {
          const reader = new FileReader();
          reader.onloadend = (e) => {
            const readerResult = reader.result;
            console.log(readerResult); // Print blob content as text
          };
          reader.readAsText(data, 'UTF-8');

        }, error => console.log(error));

Ответ 7

Я столкнулся с этой проблемой при тестировании angular приложения с устройств iPhone/iPad. Приложение работало нормально с рабочего стола. Я включил Cors на сервере узла, но все еще получаю эту ошибку. Итак, я сделал следующее, чтобы решить это.

Запустите ng serve с использованием IP: ng serve --host 192.168.1.10

Point API, использующие IP: В environment.ts я изменил URL-адрес ниже:

apiUri: 'http://192.168.1.10:9000/api'

Теперь я могу получить доступ к URL с мобильных устройств.

Ответ 8

TL; DR: /etc/hosts отсутствует запись с именем домена.

В Angular Universal у меня была проблема, связанная с тем, что часть SSR выдает эту ошибку из-за того, что на сервере выполняется рендеринг на стороне сервера (;)).

Скажем, мой сайт был доступен по адресу https://myproject.com/ и работает хорошо. Когда вы напрямую нажимаете на любой URL, запускается SSR. Теперь, если SSR должен выполнить вызов API, он сделает HTTP-запрос к https://myproject.com/api/blah/show в локальной сети. И это где-то выкидывала ошибку.

Для отладки я попытался запустить curl https://myproject.com/api/blah/show (на VPS) и получил ошибку.

Чтобы это исправить, мне нужно было добавить в мой файл /etc/hosts следующую строку:

127.0.0.1 myproject.com

После этого и команда curl, и SSR сработали!

Стек:

  • Ubuntu 16 & 18
  • Nginx
  • Позвольте шифровать SSL
  • Angular универсал
  • экспресс