J'ai une application angular 8 et je souhaite appeler un appel Get api.
Mais j'obtiens cette erreur:
getDossierEntry( patientUUID: string, type: String = '' ): Observable<DossierEntry[]> { patientUUID = '0d584905-fc20-4723-870a-0f0214419507'; const entryType = type === '' ? 'all' : 'type/' + type; console.log(this.http.get<DossierEntry[]>('/api/patient/' + patientUUID + '/DossierEntry/' + entryType )); console.log(patientUUID); return this.http.get<DossierEntry[]>('/api/patient/' + patientUUID + '/DossierEntry/' + entryType ); }
Voici le fichier ts: p>
HttpErrorResponse {headers: HttpHeaders, status: 404, statusText: "Not Found", url: "http://localhost:4200/api/patient/$%7BpatientUUID%7D/DossierEntry/all", ok: false, â¦} error: "<!DOCTYPE html>âµ<html lang="en">âµ<head>âµ<meta charset="utf-8">âµ<title>Error</title>âµ</head>âµ<body>âµ<pre>Cannot GET /api/patient/$%7BpatientUUID%7D/DossierEntry/all</pre>âµ</body>âµ</html>âµ" headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: Æ} message: "Http failure response for http://localhost:4200/api/patient/$%7BpatientUUID%7D/DossierEntry/all: 404 Not Found" name: "HttpErrorResponse" ok: false status: 404 statusText: "Not Found" url: "http://localhost:4200/api/patient/$%7BpatientUUID%7D/DossierEntry/all" __proto__: HttpResponseBase
Et voici le service:
Observable {_isScalar: false, source: Observable, operator: MapOperator} operator: MapOperator project: Æ (res) thisArg: undefined __proto__: Object source: Observable {_isScalar: false, source: Observable, operator: FilterOperator} _isScalar: false __proto__: Object
Et voici l'erreur totale
ngOnInit() { this.documentCorrespondencService.getDossierEntry('physical').subscribe((result: any)=> { console.log(result.values); this.entries = result; this.dossiersLoaded = true; }); }
4 Réponses :
Comme je vois, la réponse que vous obtenez est 404, ce qui signifie que l'URL n'est pas trouvée.
Dans votre code,
vous ne remplacez pas la valeur de patientUUID
que vous pouvez vérifier dans l'URL
return this.http.get<DossierEntry[]>('/api/patient/{patientUUID}/DossierEntry/' + entryType
Mais qu'est-ce que je dois changer alors?
Pouvez-vous dire ce que je fais de mal? OU que je dois publier plus de code? Serait bien
Salut j'ai ajouté l'Interceptor. Mais qu'est-ce que je dois changer alors? Merci
Mais alors comment émettre le patientUUID alors dans l'URL? Merci
en mode développeur, vous devez ajouter proxy.conf.json pour transférer vers votre serveur: par exemple:
{ "/api": { "target": "http://localhost:1337", "secure": false } }
Je ne comprends pas ça. qu'est-ce que 1337 ?? J'ai mis à jour le message
ce n'est qu'un exemple. mon serveur écoute sur le port 1337. Si vous appelez l'url relative (/ api), vous devez la rediriger vers votre serveur, si vous appelez externe avec ip, vous devez définir l'URL absolue, car le relatif rappelle le serveur qui s'exécute angular.
Oke, mais ce n'est pas le problème. J'ai mis à jour le message
Mappez le type de résultat sur n'importe quel ou
ngOnInit() { this.healthAPIService.getDossierEntry('physical').subscribe((result:any)=> { console.log(result.values); this.entries = result; this.dossiersLoaded = true; }); }
ngOnInit() { this.healthAPIService.getDossierEntry('physical').subscribe((result:DossierEntry[])=> { console.log(result.values); this.entries = result; this.dossiersLoaded = true; }); }
Merci de votre aide. Mais obtenez toujours une erreur. Mise à jour du message
pourriez-vous s'il vous plaît mettre le résultat entre parenthèses comme ** (result:any)=>
** et vérifier une fois.
Mais cela n'a-t-il rien à voir avec la méthode invoke? Parce que je ne déclenche pas cette méthode bien sûr, lorsque j'utilise le httpClient
atSantosh Avez-vous d'autres suggestions?
J'ai ajouté l'INterceptor
Veuillez vérifier votre URL backend. Vous en faites un faux http: // localhost: 4200 / api / patient /% 7BpatientUUID% 7D / DossierE ntry / type / physical
. Il doit être http: // localhost: 1337 / api / patient /
. et http: // localhost: 1337 / api / patient / 11001 / DossierEntry / type / ph ysical
Oui, comprenez. Mais c'est le problème. Alors pourquoi ne trouve-t-il pas l'identifiant de l'utilisateur? l'url correcte de Swagger est la suivante: / api / patient / {participantId} / DossierEntry / type / {dossierEntry CategoryType}
Qu'est-ce que je dois changer à propos de l'appel API alors? getDossierEntry (type: String = ''): Observable
Donc, même quand je fais patientUUID codé en dur, comme ceci: return this.http.get
Pour obtenir le résultat attendu, utilisez l'option ci-dessous de mise à jour de l'URL de l'API avec patientUUID
Option 1:
console.log(this.http.get<DossierEntry[]>('/api/patient/' + patientUUID + '/DossierEntry/' + entryType)Option 2:
Autre façon d'utiliser patientUUID
dans l'URL
getDossierEntry( patientUUID: string, type: String = '' ): Observable<DossierEntry[]> { const entryType = type === '' ? 'all' : 'type/' + type; return this.http.get<DossierEntry[]>('/api/patient/${patientUUID}/DossierEntry/' + entryType); }
Problème : La valeur patientUUID
n'est pas ajoutée à l'URL à l'emplacement prévu et la valeur 404 est introuvable car elle s'avère invalide
Pour résoudre ce problème, mettez à jour l'URL de l'API comme ci-dessus avec les paramètres - patientUUID et type et pour déboguer ajouter une console avant de revenir pour vérifier l'url comme ci-dessous
getDossierEntry( patientUUID: string, type: String = '' ): Observable<DossierEntry[]> { const entryType = type === '' ? 'all' : 'type/' + type; return this.http.get<DossierEntry[]>('/api/patient/' + patientUUID + '/DossierEntry/' + entryType ); }
Merci . Je vais le vérifier demain et je vous laisse maintenant.
Mais puis-je vous envoyer les fichiers?
@mightycodeNewton, je ne pense pas que SO autorise l'envoi de fichiers, mais vous pouvez créer stackblitz pour reproduire votre problème
Mais nous pouvons aller discuter. Mais pouvez-vous m'inviter à discuter? Parce que je ne vois pas la fonction ici.
Naga, tu es là? Je le teste maintenant
Mais pouvons-nous aller discuter.
J'utilise un mobile et non mon ordinateur pour le moment, veuillez tester et me faire savoir si vous rencontrez un problème / une erreur
Mise à jour du message
Mais cela n'a rien à voir avec l'intercepteur. dans mon post
Pouvez-vous essayer la première option une fois?
Oui, j'ai aussi essayé celui-là. Mais cela ne prend pas le patientUUID. Parce que même lorsque je fais un patientUUID codé en dur, cela ne fonctionne pas non plus.
et si je fais ceci: console.log (patientUUID); ça revient physique.
utilisez '/ api / patient /' + patientUUID + '/ DossierEntry /' + entryType, from post, je vois que vous utilisez $ {patientUUID}
Je suis dans le fuseau horaire CST
J'utilise ça: return this.http.get
Continuons cette discussion dans le chat .
Je suis dans le chat maintenant. Mais je pense que cela a à voir avec la méthode invoke. Mais je ne sais pas comment changer cela.
Oke, problème résolu. Je vous remercie pour vos efforts! oke, gentil
Vous appelez une URL qui renvoie une erreur 404. Votre traitement du patientUUID dans l'URL est probablement incorrect.
Vous semblez ne pas remplacer la valeur
patientUUID
lors de l'appel de l'API.Mais pourquoi l'abonné obtiendrait cela indéfini, si c'est une erreur?
throwError ("vous ne verrez pas ce message"). subscribe (console.log)
n'imprime rien. Y a-t-il un intercepteur quelque part au milieu, mangeant des réponses d'erreur HTTP et émettant des valeurs vides?Mettre à jour le post ok, ce sera bien
voir la mise à jour de l'article