Ich versuche, eine HTTP-GET-Anfrage mit Angular 4 und HttpClient/HttpHeaders von @ Angular/Common/http. Hier ist, wie meine Anfrage aussieht:Typescript Fehler beim Abrufen von HTTP-Optionen von Angular Service
getPhysicians() {
let queryURL, queryOptions;
queryURL = "http://path/to/our/backend/pathologists";
queryOptions = {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
withCredentials: true
};
let request = this.http.get<any[]>(queryURL, queryOptions);
request.subscribe(
data => {
data.forEach((physician) => { // no problems here
// some logic with the response items
})
},
err => {
console.log("Error retrieving physicians");
}
);
}
Dieser Code funktioniert gut. Mein Partner und ich haben jedoch entschieden, dass wir einige dieser Informationen nicht in jede Komponente einbeziehen müssen und haben uns entschieden, einen Dienst zum Erstellen von Abfragen zu erstellen. Hier ist, wie das aussieht:
import { Injectable } from '@angular/core';
import { HttpHeaders } from '@angular/common/http';
@Injectable()
export class QueryBuilderService {
baseURL: string = "http://path/to/our/backend/"
requestOptions: any = {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
withCredentials: true
};
constructor() { }
getRequestOptions() {
return this.requestOptions;
}
getAllPhysiciansQuery() {
return this.baseURL + "pathologists";
}
}
Und der eingestellte Code in der Komponente, die die Service-Injektion wie folgt aussieht:
getPhysicians() {
let queryURL, queryOptions;
queryURL = this.queryBuilderService.getAllPhysiciansQuery();
queryOptions = this.queryBuilderService.getRequestOptions();
let request = this.http.get<any[]>(queryURL, queryOptions);
request.subscribe(
data => {
data.forEach((physician) => { // this line now throws a compilation error
// some logic with the response items
})
},
err => {
console.log("Error retrieving physicians");
}
);
}
Wir kehren die gleichen genauen Werte wie vorher, aber jetzt von diesem Service. Allerdings bekommen wir jetzt einen Typoskript Fehler auf den „Daten“ Funktionsparametern Angabe
Property 'forEach' does not exist on type 'HttpEvent<any[]>'.
Property 'forEach' does not exist on type 'HttpSentEvent'.
Ich kann nicht für das Leben von mir herauszufinden, warum wir einen Fehler bekommen, wenn wir die gleichen genauen Werte zurückkehren. Warum kommt der Typ nicht mehr als [] zurück? Ich habe überprüft, dass der Parameter queryURL funktioniert, unabhängig davon, ob er in getPhysician erstellt oder aus dem QueryBuilderService abgerufen wird. Es sind die Optionen, die dieses Tippproblem verursachen.
EDIT Hier ist, was zurückgegeben wird, wenn wir den Aufruf der ursprünglichen Art und Weise machen: Hinweis, diese Testdaten alle gerade ist. Keine wirklich sensiblen Informationen hier.
Jede Hilfe ist sehr geschätzt
Wie sehen Ihre Daten aus? Kannst du es console.log? – Farasi78
@ Farasi78 Ich habe die Beschreibung bearbeitet, um einen Screenshot dieser Information zu erhalten. –
Hey, können Sie die Daten aus der Antwort loggen, wenn Sie die zweite Methode verwenden? Ich denke, wenn Sie die ForEach-Schleife entfernen, sollten Sie immer noch in der Lage sein, die rohe Antwort zu protokollieren. Ich denke, es könnte ein Array von Typ Any mit einem Array erstellen, so dass Sie etwas wie Daten [0] .forEach benötigen würden .... nur Raten, wäre einfacher, wenn Sie es protokollieren könnten ... – Farasi78