2017-02-07 1 views
0

hier zugreifen können, ist dies mein beobachtbar:beobachtbare Abos, Antwort zurückgegeben wird, keine Felder

userLogin(formData: Object):Observable<Response> { 
    return this.http.post(apiURL + '/api/logon', formData) 
     .map((response: Response) => { 
      return response.json(); 
     } 
    }) 
} 

Dann habe ich irgendwo da dies abonnieren:

this.auth.userLogin(forData) 
    .subscribe((result) => { 
    console.log(result); // this logs the response from server object 
    // console.log(result.username) doesn't work WHY? 
    // Error: Property 'username' does not exist on type 'Response' 
    }) 

Also, was mache ich falsch?

EDIT:

console.log gibt dies:

Object { 
    pappassword:"2f636cc3f8ffeda00dfe448fc483ce3" 
    success:true 
    uamip:"192.168.182.1" 
    uamport:"3990" 
    username:"jh" 
    userurl: "http://www.gstatic.com/generate_20" 
} 

enter image description here

+0

Was ist die Ausgabe von console.log (Ergebnis) ;? Alles scheint mir gut zu sein. Es könnte sich dabei nur um einen Typfehler handeln, da die Eigenschaft 'result' beim Typ Antwort nicht existiert. –

+0

Sie senden Observable von Ihrem Service zurück. Aber Sie sollten Observable oder noch besser zurück, erstellen Sie Ihr eigenes Datenmodell und geben Observable zurück (ich würde glauben, dass ein Modell namens Identity für Ihren Fall geeignet wäre). –

+0

@SabbirRahman hat die Frage mit der Konsolenantwort aktualisiert. – Rexford

Antwort

2

Der Rückgabetyp Userlogin Methode Observable<T> sein sollte, hier T repräsentieren Ihre Antwort-Datentyp/Schnittstelle. Sie können eine Schnittstelle mit Ihrem Antwortdatenmodell erstellen und diese als Ihren Datentyp verwenden.

interface UserInterface { 
    pappassword: string 
    success: boolean 
    uamip: string 
    uamport: string 
    username: string 
    userurl: string 
} 

Und in Ihrer Userlogin Methode:

userLogin(formData: Object):Observable<UserInterface> { 
    ... 
} 

Wir haben gerade Observable<any> verwenden könnten, aber dies ist die beste Praxis mit Typoskript.

0
export class UserPayload{ 
constructor(public pappassword: string, 
      public success: boolean, 
      public uamip: string, 
      public uamport: string, 
      public username: string, 
      public userurl: string){}//using ts shorthand for properties in constructor 
} 

userLogin(formData: Object):Observable<UserPayload> { 
return this.http.post(apiURL + '/api/logon', formData) 
    .map((response: UserPayload) => { 
     return response.json(); 
    }).catch((error:any)=> Observable.throw(error.json() || 'Server Error')); 
} 

this.auth.userLogin(forData) 
    .subscribe((result) => { 
    console.log(result); // this logs the response from server object 
    console.log(result.username); //this should work now 
}, 
e=>{console.log(e)} 
); 
Verwandte Themen