2017-02-07 11 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' 
    }) 

だから私は間違って何をやっていますか?

EDIT:

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);の出力とは何ですか?すべてが私には大丈夫だと思われる。 '結果'というプロパティが実際にタイプResponseに存在しないため、タイプエラーである可能性があります。 –

+0

サービスからObservable を返送しています。しかしObservable 以上を返して、自分のデータモデルを作成し、Observable を返す必要があります(IDというモデルがあなたのケースに適していると思います)。 –

+0

@SabbirRahmanはコンソールレスポンスで質問を更新しました。 – Rexford

答えて

2

戻り値の型userloginの方法がここにObservable<T>、あるべきTあなたの応答のデータ型/インタフェースを表します。応答データモデルを使用してインタフェースを作成し、これをデータ型として使用することができます。

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

そして、あなたのuserloginの方法で:

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)} 
); 
関連する問題