2016-07-22 93 views
1

我有一個登錄服務調用授權服務,我需要捕獲從api服務器返回的任何錯誤。處理角度2服務中的可觀察錯誤

我現在有這在我的login.component:

loginUser() { 
    console.log(this.localUser.email); 
    console.log(this.localUser.password); 

    this.loginService.loginUser(this.localUser) 
     .subscribe(
     token => { 
      console.log('token = ' + token) 
      this.token = token}, 
     error => { 
      this.errorMessage = <any>error 
      console.log("err msg = " + this.errorMessage); 
     }, 
     () => this.completeLogin()); 
} 

這是我的登錄服務:

loginUser(localUser: LocalUser) { 
    return this.authorizationService.loginUser(localUser); 
} 

,這是我的身份驗證服務:

loginUser(localUser: LocalUser): Observable<Token> { 
    var grantString: string = "grant_type=password&username="; 
    var passwordString : string = "&password=" 
    var email = localUser.email; 
    var password = localUser.password; 

    var headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

    var creds:string = grantString + email + passwordString + password; 

    return this.http.post(this.url, creds, { headers: headers }) 
     .retry(2) 
     .timeout(20000, new Error('Timeout expired.')) 
     .delay(1000) 
     .map((response: Response) => <Token>response.json()) 
     .catch(this.handleError); 
} 

handleError(error: any) { 
    let errorMsg = error.message || 'Server error'; 
    console.error(errorMsg); 
    return Observable.throw(errorMsg); 
} 

問題是返回的錯誤消息不是服務器錯誤,但是: 「err msg = TypeError :對象不支持屬性或方法'扔'「

有關如何獲得真實消息的任何想法?

回答

3

很可能你錯過了rxjs'throw'static的導入。
如果您自己逐個導入rxjs運算符和靜態文件,可能會發生這種情況。

// Statics
import'rxjs/add/observable/throw';

有關完整列表檢查這裏:
https://github.com/ReactiveX/rxjs/blob/master/src/Rx.ts

+0

我覺得這麼愚蠢......感謝您的幫助。 –