J'essaie de consommer une URL d'API. J'appelle l'API avec le code ci-dessous.
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);
});
}
Dans le code angulaire, je ne reçois aucune réponse et je reçois une erreur:
Réponse d'erreur HTTP pour (URL inconnue): 0 Erreur inconnue ".
Toutefois, lorsque je lance une demande si j'ouvre des outils de développement sur Chrome, je constate que la réponse est reçue du serveur.
L'URL est l'URL "https: // ..." et non "http: // ...".
Le problème est Angular Universal utilisé Express et la sécurité valide le certificat SSL sur le serveur; J'ai utilisé un certificat SSL auto-signé.
La solution consiste à ajouter NODE_TLS_REJECT_UNAUTHORIZED=0
à votre environnement pour désactiver la vérification SSL dans Node.js. Vous devriez seulement mettre ceci en développement; en production c'est très risqué.
Accepter @StephanRauh et vouloir ajouter quelques points à son. Cela se produit lorsqu'une demande ne sort pas ou il n'est pas en mesure de parler au serveur pour une raison quelconque.
Les raisons pourraient être:
Vous n'êtes pas dans le même domaine, le même protocole, le même port entre le backend et le frontend.
Au cas où quelqu'un trébuche, aucune de ces solutions ne fonctionne pour moi. Ce qui a fonctionné pour moi, c’est d’éteindre uBlock Origin. Il bloquait toute URL contenant le mot "ad" pour des raisons évidentes.
Citant Sander Elias sur Google Groupes :
"L’erreur 0 correspond à ce que vous obtenez lorsque la demande n’est pas supprimée. La cause la plus commune est que CORS n’est pas configuré correctement sur le serveur. Laissez-moi reformuler la question: dans 98% des cas, il s’agit d’un problème côté serveur. . "
J'ai eu exactement le même problème. J'avais pu voir le résultat dans les outils de développement de Chrome. Mais j'ai toujours eu le message d'erreur Http failure response for (unknown url): 0 Unknown Error
.
Dans mon cas, la raison était que j’ai utilisé responseType:'text'
pour interroger une charge utile text/html
. Mais ce n'est pas compatible pour une raison quelconque. Je devais passer à responseType: 'blob'
et utiliser la FileReader
pour convertir le blob en chaîne.
Donc, je suppose que vous avez le même problème lorsque le contenu renvoyé ne correspond pas à votre responseType
configuré. Par défaut, c'est 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));
J'ai rencontré ce problème lors du test d'une application angulaire à partir d'appareils iPhone/iPad. L'application fonctionnait bien à partir du bureau. J'avais activé cors sur le serveur de noeud, mais j'obtiens toujours cette erreur. Donc, j'ai fait ce qui suit pour le résoudre.
Lancer le service en utilisant IP: ng serve --Host 192.168.1.10
API de point utilisant IP: Dans le fichier environment.ts, j'ai modifié l'URL en:
apiUri: 'http://192.168.1.10:9000/api'
Maintenant, je peux accéder à une URL à partir d'appareils mobiles.