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: // ...".
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:
Sie befinden sich nicht in derselben Domäne, im selben Protokoll, am selben Port zwischen Backend und Frontend.
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.
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: . "
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));
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:
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.