2016-10-27 3 views
2

角2のHTTPのgetとrouteガードに問題があります。角2 httpがルートガードの中に入る

ユーザーがルートのガードにログインしているかどうかを確認しようとしています。

これはisLoggedサービス機能は、別のサービス

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

を呼び出し、これは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; 
} 
を行う認証サービスであるだけで、このラインである

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; 
} 

ガードファイルであります

。キャッチコールで次のエラーが発生します。

'(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; 
}