2017-02-20 13 views
0

Обновление Если я поправлю свой api на retunr res.status (200) вместо res.status (401), тогда я получу свой код для работы , Я предполагаю, что необработанная ошибка связана с тем, что я возвращаю 401, но как я могу поймать и использовать 401, если я получаю логическую ошибку, добавляющую .catch к моему .map?Получите необработанную ошибку обещания, но когда я добавляю catch, я получаю тип boolean не назначается

Im пытается сделать охранник. Мой метод заключается в запросе api, который выполняет некоторую работу на стороне сервера, и возвращает тело json с некоторой информацией пользователя и статусом true или состояние false, если веб-сайт не может быть проверен.

В моем угловом коде у меня есть

canActivate() { 
return this.http.get(`http://localhost:3000/api/user/status`, options) 
    // return this.http.get(`/api/user/status`, options) 
    .map(res => { 
    if(!res){ 
     this.router.navigate(['/login']); 
     return false; 
    } 
    let user: any = res.json(); 
    return true; 
    }) 
} 

Если я запускаю свой код с правильным токеном, я получаю аутентификацию страницы. Если я изменю токен, мой тест POSTMAN вернет status: false, но когда я использую свой сайт, я получаю ошибки, говоря, что у меня есть необработанные ошибки.

Так я пытаюсь добавить улов

.catch(e => { 
    this.router.navigate(['/login']); 
     return false; 
    }) 

, но я получаю ошибку компиляции говоря "Аргумент типа„(е: любой) => логической“не может быть назначена для параметра типа«(ERR: любой , catch: Observable) => ObservableInput '. Тип «boolean» не присваивается типу «ObservableInput».) «

Любой совет?

ответ

0

Я использовал

.catch(e => { 
    this.router.navigate(['/login']); 
     return false; 
    }) 

но Наблюдаемый в CanActivate требует логического значения, которое может быть передано с

.catch(e => { 
    this.router.navigate(['/login']); 
     return Observable.of(false); 
    })