首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular 2 http进入路由守卫内部

Angular 2 http进入路由守卫内部
EN

Stack Overflow用户
提问于 2016-10-27 20:06:39
回答 1查看 821关注 0票数 2

我在Angular 2 http get和路由守卫方面遇到了一些问题。

我正在尝试检查用户是否在路由的守卫下登录。

这是守卫文件

代码语言:javascript
复制
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就是这行调用另一个服务的代码

代码语言:javascript
复制
isLogged() {
    return this.auth.isLogged();
}

这是执行http调用的auth服务。

代码语言:javascript
复制
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应用程序,路径如下:

代码语言:javascript
复制
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.");
}
});
EN

回答 1

Stack Overflow用户

发布于 2017-05-11 00:19:45

我不认为有必要在观察者中返回任何东西。尝试执行以下命令:

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40284186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档