我在使用Angular 2 http get和route guard时遇到了一些问题。
我正在尝试检查用户是否已登录路由保护。
这是警卫档案
var a = a.map(function(s){ return s.length });
var b = a.map( s => s.length );
服务功能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() {
return this.auth.isLogged();
}
我在.catch调用上遇到以下错误:
类型的参数'(错误:任何)=> void'不能赋值给'参数'(错误:任何,被捕获:可观察)=> ObservableInput”。 类型'void'不能分配给'ObservableInput'类型。
万一重要,服务器是Express应用程序,具有以下路径:
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;
}
答案 0 :(得分:0)
我认为不需要在Observer中返回任何内容。尝试执行以下操作:
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;
}