2016-10-27 1 views
2

Ich habe ein paar Probleme mit Angular 2 http erhalten und Route Wachen.Angular 2 http bekommen innerhalb der Route Guard

Ich versuche zu überprüfen, ob ein Benutzer auf der Wache einer Route angemeldet ist.

Dies ist die Wache Datei

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

die Servicefunktion isLogged gerade diese Linie, die einen anderen Dienst

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

nennt Und dies ist der Auth-Dienst, der HTTP-Aufruf tut

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

Ich bekomme den folgenden Fehler beim .catch Anruf:

Argument des Typs '(Fehler: any) => void' kann nicht Parameter vom Typ zugewiesen werden '(err: any, gefangen: Observable) => ObservableInput'. Der Typ 'void' kann nicht dem Typ 'ObservableInput' zugewiesen werden.

Gerade falls es darauf ankommt, ist der Server ein Express-App mit dem folgenden Pfad:

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."); 
} 
}); 

Antwort

0

Ich glaube nicht, dass es eine Notwendigkeit, etwas in Observer zurückzukehren. Versuchen Sie Folgendes auszuführen:

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