2017-02-07 2 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) ;? Мне все кажется хорошо. Это может быть просто ошибка типа, поскольку свойство «result» на самом деле не существует в типе Response. –

+0

Вы возвращаетесь к наблюдаемому . Но вы должны возвращать 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:

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)} 
); 
Смежные вопросы