【问题标题】:Angular2 Navigating to a path upon HTTP 401 errorAngular2在HTTP 401错误时导航到路径
【发布时间】:2016-12-13 20:19:28
【问题描述】:

我正在使用 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 代码。

【问题讨论】:

  • 错误是否从您的handleError 函数记录到控制台?
  • 是的。它是 401。

标签: http angular error-handling routes


【解决方案1】:

在 ui-router-ng2 (import { UIRouter } from 'ui-router-ng2';) 中,您可以通过注入 router: 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

【讨论】:

  • 谢谢@53l3m。我希望有一种原生的 Angular2 方法可以做到这一点,特别是因为我提到的链接中的用户使用与我相同的代码成功地进行了路由。
  • 它不需要任何东西,只是代替import { Router} 你会import { UIRouter } from 'ui-router-ng2'; `,这有什么大不了的吗?
  • 对不起@53l3m,我不是要冒犯你,但我希望在不向我的代码中添加新模块并修复我在这里做错的事情的情况下解决这个问题。
  • 祝你好运哥们:)
猜你喜欢
  • 2017-02-26
  • 2017-04-21
  • 2017-08-17
  • 2016-09-29
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
相关资源
最近更新 更多