获取未处理的promise错误,但是当我添加catch时,我得到类型boolean不可赋值

时间:2017-02-20 15:53:10

标签: angular authentication typescript

更新如果我将我的api修改为retunr res.status(200)而不是res.status(401),那么我可以使用我的代码。 我猜测未处理的错误是因为我返回401,但是如果我将布局错误添加到我的.map中,我如何捕获并使用401?

我试图成为一名认证警卫。我的方法是请求一个api在服务器端做一些工作并返回一个json主体,其中一些用户信息和状态为true,如果无法验证webtoken,则返回false状态

在我的角度代码中我有

canActivate() {
return this.http.get(`http://localhost:3000/api/user/status`, options)
  // return this.http.get(`/api/user/status`, options)
  .map(res => {
    if(!res){
      this.router.navigate(['/login']);
      return false;
    }
    let user: any = res.json();
    return true;
  })
}

如果我使用正确的令牌运行我的代码,我会得到页面身份验证。如果我修改了令牌,我的POSTMAN测试会返回status: false,但是当我使用我的网站时,我会收到错误消息,说我有未处理的错误。

所以我尝试添加一个catch

.catch(e => {
    this.router.navigate(['/login']);
      return false;
  })

但是我得到编译错误,说“类型的参数”(e:any)=> boolean'不能赋值给''的参数'(错误:任何,捕获:可观察)=> ObservableInput'。类型'布尔值'不能分配给'ObservableInput'类型。)“

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我正在使用

.catch(e => {
    this.router.navigate(['/login']);
      return false;
  })

但是CanActivate中的Observable需要一个可以用

传递的布尔值
.catch(e => {
    this.router.navigate(['/login']);
      return Observable.of(false);
  })