2016-12-13 67 views
0

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

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代码。 UIRouter并呼吁the go method

+0

是否得到记录错误从你的'handleError'功能安慰? – Brad

+0

是的。它是401. – kkotak

回答

0

在UI的路由器NG2(import { UIRouter } from 'ui-router-ng2';),您可以通过注入路由器编程导航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

+0

谢谢@ 53l3m。我希望有一个原生的Angular2做这件事的方式,特别是因为我提到的链接中的用户成功地使用了与我一样的代码进行路由。 – kkotak

+0

它不需要任何东西,只需要从'ui-router-ng2'导入{UIRouter},而不是'import {Router}'。 ' ',这是一个大问题? –

+1

对不起@ 53l3m,我不是故意冒犯你,但是我正在寻求解决这个问题,而不需要在我的代码中添加新的模块,并修复我在这里做的错误。 – kkotak