2016-11-22 24 views
0

Angular2/Nodeで作業しています。我々は角度2捕捉401応答

login(username: string, password: string): Observable<boolean> { 
    return this.http.post('http://localhost:3000/api/login', { email: username, password: password }) 
    .map((response: Response) => { 
    // login successful if there's a jwt token in the response 

    let token = response.json() && response.json().token; 
    if (token) { 
     // set token property 
     this.token = token; 

     // store username and jwt token in local storage to keep user logged in between page refreshes 
     localStorage.setItem('currentUser', JSON.stringify({ username: username, token: token })); 
     // return true to indicate successful login 
     return true; 
    } else { 
     // return false to indicate failed login 
     return false; 
    } 
    }).catch(err =>{ 
    if (err.status === 401) 
    { 
     console.log("caught 401 exception"); 
     return false; 
    } 
    }); 

問題は、私は次のエラーにタイプの

引数を取得するということで、次のしているにlogginについては

'(ERR:任意の)=>ブールは' に割り当て可能ではありません'(err:any、catch:Observable)=> ObservableInput'のタイプのパラメータです。タイプ 'boolean'は 'ObservableInput'タイプに割り当てられません。

と私はログインをテストするための401Sに

をキャッチできるように取得するために変更する必要があるかが不明だ

this.webapiService.login("[email protected]","moneyIsGood").subscribe(result => { 
    if (result === true) { 
    console.log('Username or password is correct'); 
    } else { 
    console.log('Username or password is incorrect'); 
    } 
}); 

編集を以下のようになります。i「は思えます.catchを使用して一緒に購読することについてのポイントを見逃していますが、方法と理由はまだ分かりません。

+0

これを確認できますか?[Angular2:HTTPエラー処理](http://stackoverflow.com/questions/36628498/angular2-http-error-handling) –

答えて

2

のようなエラーをキャッチできます。

.catch(err =>{ 
    if (err.status === 401) 
    { 
     console.log("caught 401 exception"); 
     return false; 
    } 
    }); 

またはロギングを追加し、代わりに例外をスローする:

.catch(err => { 
     console.log("caught exception" + err.status); 
     return Observable.throw(err); 
}); 

もsubsribeに追加:

this.webapiService.login("[email protected]","moneyIsGood").subscribe(result => { 
    console.log('Username or password is correct'); 
    }, error => { 
     if (error.status === 401){ 
     console.log('Username or password is incorrect'); 
     } 
}); 
1

あなたは、このコードは削除することができ、その

this.http.post('http://localhost:3000/api/login', { email: username, password: password }) 
.catch((error: any) => this.handleError(error)) 
.map((response: Response) => { 
関連する問題