Winkel-4 Http-Post-Antwort im Objekt
Ich bin mit Winkel-4 in Kombination mit einem Asp.net web-api. Ich weiß nicht, wie lese ich die Eigenschaften meiner reagieren.
Meine Antwort Aussehen mag dieses
Meine post-Anfrage:
postLogin(values: string): Observable<string> {
let body = "[email protected]&password=Test1234!&grant_type=password";
/*let body = values + "&grant_type=password";*/
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
let options = new RequestOptions({headers: headers});
return this._http.post(this._postLoginUrl, body, options)
.catch(this.handleError);
}
Und meinen eigentlich Aufruf der post-Methode:
this._loginService.postLogin(value)
.subscribe(
data => console.log(data),
err => console.log(err));
Und das funktioniert, ich bekomme die Antwort in meine Konsole
Aber wie kann ich Lesen Sie meine Eigenschaften?
UPDATE
Ich habe aktualisiert mein code ein bisschen, aber es funktioniert immer noch nicht wie ich will, ich hab die Dokumentation gelesen aber ich konnte immer noch nicht weiter kommen.
Meiner neuen Aufruf der post-Methode:
console.log("username=" + this.username + "&password=" + this.password);
this._loginService.postLogin("username=" + this.username + "&password=" + this.password)
.subscribe(
user => this.user = user),
err => console.log(err);
Und meine neue post-Anforderung:
postLogin(values: string): Observable<User> {
let body = values + "&grant_type=password";
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
let options = new RequestOptions({headers: headers});
return this._http.post(this._postLoginUrl, body, options)
.map(this.extractData)
.catch(this.handleError);
}
Mit extractData Funktion
private extractData(res: Response) {
let body = res.json();
return body.fields || {};
}
Wenn ich eine Konsole von mein user-Objekt nun bekomme ich nicht und wenn ich versuchen, auf eine Eigenschaft des Benutzers, mein browser startet erfrischend. Was mache ich falsch, warum kann ich nicht auf meine Daten zugreifen?
- Bitte Lesen Sie die Dokumentation.
- Wie gesagt, lies die Dokumentation... Hier ist Ihre Antwort: Winkel.io/docs/ts/latest/guide/...,:) Aber ich empfehle um das ganze zu Lesen 😉
- Lesen Sie die Dokumentation, wie gesagt! Unabhängig von der post-Methode müssen Sie zum Parsen der JSON-Antwort. Tun Sie es hier auf den Rückgabewert in Ihrem service
return this._http.post(this._postLoginUrl, body, options).map(res => res.json())
- Wie @joh04667 gesagt, müssen Sie deserialisiert verwenden .json () - Methode auf Antwort
- Aktualisierte Frage, noch Probleme.
- Ich glaube nicht, dass
body.fields
definiert werden... basierend auf deiner Konsole vor, Ihr Schlüssel Optionen sindaccess_token
etc... try console.log(Körper) nach dem Deserialisieren. - Wenn Sie möchten, dass die Liste der Schlüssel, die in den JSON, versuchen
Object.keys(body)
. Es ist überhaupt nicht klar, was Sie erwartet.fields
werden. - Könnten Sie ein typisierte Antworten:
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
dadurch erhalten Sie das response-Objekt.
Wie Sie sehen können aus Ihrer Antwort,
gibt es keine
fields
in Ihre Daten, die Sie empfangen, sondern "nur" ein Objekt mit Eigenschaften. Da es keinefields
, deshalb sollten Sie nur die tatsächliche Reaktion:Und wenn Sie erhalten Ihre Daten können Sie einfach auf die Felder