Angular 角度4拦截器,带ngx重新三角形

Angular 角度4拦截器,带ngx重新三角形,angular,restangular,Angular,Restangular,我用的是Angular 4 我想截获请求,如果http状态码是403,我想将用户重定向到登录页面 现在我在我的app.module.ts /** * NGX-ANGULAR configs. */ // Function for setting the default restangular configuration export function RestangularConfigFactory (RestangularProvider) { // Set base URL R

我用的是Angular 4

我想截获请求,如果http状态码是403,我想将用户重定向到登录页面

现在我在我的
app.module.ts

/**
 * NGX-ANGULAR configs.
 */
// Function for setting the default restangular configuration
export function RestangularConfigFactory (RestangularProvider) {

  // Set base URL
  RestangularProvider.setBaseUrl('http://192.168.1.79:8080/api/');

  // If token not valid/expired
  RestangularProvider.addErrorInterceptor((response, subject, responseHandler) => {

    if (response.status === 403) {

      // Redirect user to login page
      //Router.navigateByUrl(['login']);

      return false; // error handled
    }
    return true; // error not handled
  });
}
Router.navigateByUrl(['login'])显然不起作用

我试图从
@angular/Router
导入
路由器
,并将其注入AppModule构造函数,但无法访问
内的
重新启动配置工厂
功能

有人能帮忙吗


谢谢。

我在试图解决同样的问题时遇到了你的问题,我想我会与你(以及其他任何人)分享我的解决方案

导入
中设置
重启模块
时,可以指定要传递到配置工厂的任何其他服务。就我而言,我已经通过了身份验证服务:

export function restangularConfigFactory(restangularProvider, auth) {
  // set base url and add token to all requests
  ...
}

@NgModule({
  ...
  imports: [
    ...
    RestangularModule.forRoot([AuthService], restangularConfigFactory)
  ],
  ...
})
因此,我所要做的就是将
Router
添加到我的函数参数和服务列表中,就像这样(不要忘记
import{Router}from'@angular/Router';
):

然后我可以像在其他任何地方一样使用
路由器

export function restangularConfigFactory(restangularProvider, auth, router) {
  ...
  restangularProvider.addErrorInterceptor((response, subject, responseHandler) => {
    if (response.status == 403) {
      router.navigate(['login']);
      return false;
    }
    else {
      return true;
    }
  });
  ...
}
export function restangularConfigFactory(restangularProvider, auth, router) {
  ...
  restangularProvider.addErrorInterceptor((response, subject, responseHandler) => {
    if (response.status == 403) {
      router.navigate(['login']);
      return false;
    }
    else {
      return true;
    }
  });
  ...
}