web-dev-qa-db-fra.com

Angular 4: "Réponse d'échec HTTP pour (URL inconnue): Erreur inconnue"

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: // ...".

18
user8300647

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:

  1. Si la connectivité Internet est très lente pour se connecter au serveur ou pas du tout disponible.
  2. Le serveur lui-même est en panne, c’est-à-dire qu’il n’ya pas de gestionnaire pour notre demande.
2

Vous n'êtes pas dans le même domaine, le même protocole, le même port entre le backend et le frontend.

2
guest

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.

1
ymerej

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. . "

1
Stephan Rauh

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));
0
Christian Lutz

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.

0
Manish Jain