2016-10-08 53 views
3

我有下面的代碼:角2:返回時,未捕獲的錯誤可觀察

import { Injectable } from '@angular/core'; 
import { Router, CanActivate } from '@angular/router'; 
import { Angular2TokenService } from 'angular2-token'; 
import { Observable } from 'rxjs/Observable'; 

import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/catch'; 

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(
    private _tokenService: Angular2TokenService, 
    private router: Router) {} 

    canActivate():Observable<boolean>|boolean { 
    return this._tokenService.validateToken().map(res => { 
     return res.json().success; 
    }); 
    } 
} 

當我打開我的網頁,通過AuthGuard去,我得到:

未捕獲的(以諾) :狀態響應:401未經授權的網址: http://localhost:4200/api/auth/validate_token

預計401狀態。我不明白的是如何簡單地讓我的canActivate()函數返回false當答覆是401.我該怎麼做?

回答

1

以下是我最終結束了處理它:

import { Injectable } from '@angular/core'; 
import { Router, CanActivate } from '@angular/router'; 
import { Angular2TokenService } from 'angular2-token'; 
import { Observable } from 'rxjs/Observable'; 

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(
    private _tokenService: Angular2TokenService, 
    private router: Router) {} 

    canActivate():Observable<boolean>|boolean { 
    return Observable.create(observer => { 
     this._tokenService.validateToken().subscribe(res => observer.complete(), err => { 
     this.router.navigate(['/sign-in']); 
     observer.next(false); 
     }); 
    }); 
    } 
} 

的顯著的事情是,我的subscribe有兩個參數。第一個是成功案例,第二個是錯誤案例。