2016-10-27 2 views
2

각도 2 http get 및 route guard에 문제가 있습니다.각도 2 http가 루트 가드 내부에 있음

사용자가 경로 경비에 로그인했는지 확인하려고합니다.

은 서비스 기능 isLogged 다른 서비스를

isLogged() { 
    return this.auth.isLogged(); 
} 

를 호출 만이 줄 수있는 가드 파일

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    return this.checkLogin(state.url); 
} 

checkLogin(url) { 
    if(url == "/login") { 
     return !this.service.isLogged() 
    } 

    if(this.service.isLogged()) { 
     return true; 
    } 

    this.service.redirectURL = url; 
    this.router.navigateByUrl('/login'); 
    return false; 
} 

입니다 그리고 이것은 HTTP 호출

isLogged() { 
    let isLogged = new Observable<boolean>(observer => { 
     var headers = new Headers(); 
     headers.append("Content-Type", 'application/json'); 

     return this.http.get(`${Constants.SERVER_IP}/auth/logged`,{headers: headers}) 
      .map(res => res.json()) 
      .map(user => { 
       observer.next(true); 
       observer.complete(); 
      }) 
      .catch(error => { 
       observer.next(false); 
       observer.complete(); 
      }); 
    }); 

    return isLogged; 
} 
을 수행하는 인증 서비스입니다

.catch 전화에서 다음 오류가 발생합니다.

'(error : any) =>'void '인수는'(err : any, catch : Observable) => ObservableInput '유형의 매개 변수에 할당 할 수 없습니다. 유형 'ObservableInput'에 'void'유형을 지정할 수 없습니다. 내가 관찰자에 아무것도 반환 할 필요가 없다고 생각

router.get('/logged', function(req, res, next) { 
if(req.session.isLogged && req.session.userID) { 
    userBackend.getUserByID(req.session.userID) 
     .then(function(user) { 
      res.json(user); 
     }) 
     .catch(function(reason) { 
      res.status(404).end(reason); 
     }); 
} 
else { 
    res.status(404).end("User not logged in."); 
} 
}); 

답변

0

: 그것은 중요한 다만 경우에

, 서버는 다음과 같은 경로 익스프레스 응용 프로그램입니다. 다음을 실행 해보십시오.

isLogged() { 
    let isLogged = new Observable<boolean>(observer => { 
     var headers = new Headers(); 
     headers.append("Content-Type", 'application/json'); 
    this.http.get(`${Constants.SERVER_IP}/auth/logged`,{headers: headers}) 
     .map(res => res.json()) 
     .map(user => { 
      observer.next(true); 
      observer.complete(); 
     }) 
     .catch(error => { 
      observer.next(false); 
      observer.complete(); 
     }); 
}); 

return isLogged; 
}