Angular 2 http进入内线卫队

时间:2016-10-27 12:06:39

标签: angular angular2-routing angular2-http

我在使用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;
}

1 个答案:

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