2017-02-07 52 views
0

在這裏,這是我觀察到:可觀察認購,則返回響應,無法訪問域

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

然後我訂閱,因爲這地方:

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' 
    }) 

那我做錯了嗎?

編輯:

CONSOLE.LOG輸出該:

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

console.log(result)的輸出是什麼;?一切似乎都對我好。它可能只是一個類型錯誤,因爲屬性'result'實際上不存在於類型Response上。 –

+0

您正在從您的服務中返回Observable 。但是您應該返回Observable 或更好,然後創建您自己的數據模型並返回Observable (我相信稱爲Identity的模型適合您的情況)。 –

+0

@SabbirRahman用控制檯響應更新了問題。 – Rexford

回答

2

返回類型USERLOGIN方法應該是Observable<T>,這裏t爲您的響應數據類型/接口。您可以使用響應數據模型創建一個接口,並將其用作數據類型。

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

而在你的用戶登陸方法:

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

我們可以只使用Observable<any>但這是打字稿的最佳實踐。

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)} 
);