it-swarm.com.de

Angular 4: "HTTP-Fehlerreaktion für (unbekannte URL): unbekannter Fehler"

Ich versuche, eine API-URL zu verwenden. Ich rufe die API mit dem folgenden Code auf.

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);
                    });
    }

Im Angular-Code bekomme ich keine Antwort und erhalte einen Fehler:

HTTP-Fehlerantwort für (unbekannte URL): 0 unbekannter Fehler ".

Wenn ich jedoch eine Anfrage stelle, wenn ich Entwicklertools in Chrome öffne, sehe ich, dass die Antwort vom Server empfangen wird.

Die URL ist die URL "https: // ..." und nicht "http: // ...".

18
user8300647

Das Problem ist, dass Angular Universal Express verwendet wird, und die Sicherheit überprüft das SSL-Zertifikat beim Server. Ich habe ein selbstsigniertes SSL-Zertifikat verwendet.

Die Lösung besteht darin, Ihrer Umgebung NODE_TLS_REJECT_UNAUTHORIZED=0 hinzuzufügen, um die SSL-Überprüfung in Node.js zu deaktivieren. Sie sollten nur dies in der Entwicklung setzen; in der Produktion ist es sehr riskant.

Zustimmung zu @StephanRauh und möchte einige Punkte hinzufügen. Dies geschieht, wenn eine Anforderung nicht ausgeht oder sie aus irgendeinem Grund nicht mit dem Server kommunizieren kann.
.__ Die Gründe könnten sein:

  1. Wenn die Internetverbindung nur sehr langsam mit dem Server verbunden ist oder überhaupt nicht verfügbar ist.
  2. Der Server selbst ist inaktiv, d. H. Es gibt keinen Handler für unsere Anfrage.
2

Sie befinden sich nicht in derselben Domäne, im selben Protokoll, am selben Port zwischen Backend und Frontend.

2
guest

Für den Fall, dass jemand anderes darauf stößt, hat keine dieser Lösungen für mich funktioniert. Was für mich funktionierte, war das Deaktivieren von uBlock Origin. Aus offensichtlichen Gründen wurde jede URL blockiert, die das Wort "Anzeige" enthielt.

1
ymerej

Zitieren Sander Elias in Google Groups :

"Fehler 0 ist das, was Sie erhalten, wenn die Anforderung nicht ausgeht. Die häufigste Ursache dafür ist, dass CORS auf dem Server nicht richtig konfiguriert ist. Lassen Sie mich das so formulieren: . "

1
Stephan Rauh

Ich hatte genau das gleiche Problem. Ich konnte das Ergebnis in den Chrome-Entwicklerwerkzeugen sehen. Ich habe jedoch immer die Http failure response for (unknown url): 0 Unknown Error-Fehlermeldung erhalten.

In meinem Fall war der Grund, dass ich responseType:'text' verwendet habe, um eine Nutzlast text/html abzufragen. Dies ist jedoch aus irgendeinem Grund nicht kompatibel. Ich musste zu responseType: 'blob' wechseln und verwandelte den Blob mit FileReader in einen String.

Ich denke, dass Sie das gleiche Problem haben, wenn der zurückgegebene Inhalt nicht mit Ihrem konfigurierten responseType übereinstimmt. Standardmäßig ist dies 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));
0
Christian Lutz

TL; DR: /etc/hosts Fehlender Eintrag mit dem Domainnamen.

In Angular Universal hatte ich ein Problem, dass der SSR-Teil diesen Fehler auslöste, da das serverseitige Rendern auf dem Server (;) erfolgt.).

Angenommen, meine Website war unter https://myproject.com/ verfügbar und lief einwandfrei. Wenn Sie eine URL direkt aufrufen, wird der SSR gestartet. Wenn der SSR nun einen API-Aufruf ausführen muss, wird eine HTTP-Anforderung an https://myproject.com/api/blah/show im lokalen Netzwerk gesendet. Und hier hat es einen Fehler ausgelöst.

Beim Debuggen habe ich versucht, curl https://myproject.com/api/blah/show (Auf dem VPS) auszuführen, und es wurde eine Fehlermeldung angezeigt.

Um das zu beheben, musste ich meiner /etc/hosts - Datei die folgende Zeile hinzufügen:

127.0.0.1 myproject.com

Danach funktionierten sowohl der Befehl curl als auch SSR!

Stapel:

  • Ubuntu 16 & 18
  • Nginx
  • Lassen Sie uns SSL verschlüsseln
  • Angular Universal
  • Ausdrücken
0
srokatonie

Beim Testen einer Winkel-App von iPhone/iPad-Geräten bin ich auf dieses Problem gestoßen. App funktionierte vom Desktop aus einwandfrei. Ich hatte Cors auf dem Knotenserver aktiviert, aber immer noch diesen Fehler erhalten. Also habe ich Folgendes getan, um das Problem zu lösen. 

Ausführen mit IP: ng serve --Host 192.168.1.10

Punkt-APIs mit IP: In der Umgebung.ts habe ich die URL wie folgt geändert:

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

Jetzt kann ich von mobilen Geräten auf URL zugreifen.

0
Manish Jain