在Angular2 / Node上工作。
对于登录我们有以下
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;
}
});
问题是我收到以下错误
类型的参数&#39;(错误:任何)=&gt;布尔&#39;不能转让给 参数类型&#39;(错误:任何,捕获:可观察)=&gt; ObservableInput&#39 ;.输入&#39;布尔&#39;不能分配给类型 &#39; ObservableInput&#39;
我不确定我需要改变什么才能让它能够抓住401s
对于测试,登录看起来如下
this.webapiService.login("Donald@geek.com","moneyIsGood").subscribe(result => {
if (result === true) {
console.log('Username or password is correct');
} else {
console.log('Username or password is incorrect');
}
});
编辑:似乎我错过了关于一起使用.catch和订阅的观点,但仍然不确定如何以及为什么。
答案 0 :(得分:3)
您可以删除此代码:
.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);
});
还添加订阅:
this.webapiService.login("Donald@geek.com","moneyIsGood").subscribe(result => {
console.log('Username or password is correct');
}, error => {
if (error.status === 401){
console.log('Username or password is incorrect');
}
});
答案 1 :(得分:1)
你可以像那样抓住错误
this.http.post('http://localhost:3000/api/login', { email: username, password: password })
.catch((error: any) => this.handleError(error))
.map((response: Response) => {