我在Angular 2 http get和路由守卫方面遇到了一些问题。
我正在尝试检查用户是否在路由的守卫下登录。
这是守卫文件
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;
}服务函数isLogged就是这行调用另一个服务的代码
isLogged() {
return this.auth.isLogged();
}这是执行http调用的auth服务。
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) ObservableInput‘类型的参数不能赋值给'(err: any,caught: Observable) => =>’类型的参数。类型'void‘不可赋值给类型'ObservableInput’。
以防万一,服务器是一个Express应用程序,路径如下:
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.");
}
});发布于 2017-05-11 00:19:45
我不认为有必要在观察者中返回任何东西。尝试执行以下命令:
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;
}https://stackoverflow.com/questions/40284186
复制相似问题