2016-11-22 2 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; 
    } 
    }); 

проблема в том, что я получаю следующую ошибку

Аргумент типа «(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'); 
    } 
}); 

редактирования: Кажется, я» m пропуская пункт об использовании .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); 
}); 

также добавить в Подписаться :

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