Angular2在HTTP 401错误时导航到路径

时间:2016-12-13 20:19:29

标签: http angular error-handling routes

我在Angular2中使用一个服务,向RESTful API服务器发出HTTP请求。我需要捕获401错误并将用户重定向到/ login页面。由于某种原因,router.nagivate([' / login'])没有在下面的代码中执行。请注意,我已按照此回答Angular 2 redirect in http/rxjs catch callback causes TypeError: Cannot read property 'subscribe' of undefined中的说明操作,但我的代码没有重定向。

search(term: string): Observable<[]> {
return this.http
  .get(this.userListUrl+'User?name='+term')
  .map((r: Response) => r.json())
  .catch(this.handleError);

}

  private handleError(error: any): Observable<any>{
if(error.status == 401) {
  console.error('An error occurred', error.status);
  this.router.navigate(['/login']);
  return Observable.of([]);
} else {
  let errMsg = error.statusText || 'Server error';
  console.error(errMsg); // log to console instead
  return Observable.throw(errMsg);
}}

constructor(private http: Http, private router:Router) {}

编辑:更新了handlerError代码。

1 个答案:

答案 0 :(得分:0)

在ui-router-ng2(import { UIRouter } from 'ui-router-ng2';)中,您可以通过注入路由器以编程方式进行导航:UIRouter并调用the go method router.stateService.go('somestate')

<强>为例

app.routing.ts

export const ROUTES: any = [
  {url: '/login',             name: 'Login',      component: LoginComponent}
]

然后你的功能应该是:

if(error.status == 401) {
  this.router.stateService.go('Login');
}

router

的位置
private router:      UIRouter; 

Constructor