代码之家  ›  专栏  ›  技术社区  ›  Jeach

捕获AngularJS/Angular ui路由HTTP错误以便采取行动

  •  0
  • Jeach  · 技术社区  · 7 年前

    我使用Angular1.3.14开发了一个AngularJS应用程序(SPA)。

    SPA基本上分为两个部分:(1)“站点”是所有公共的东西;(2)“应用程序”需要一个有效的 SessionID 在标题中。否则,它抛出一个http401。

    一切工作都相对良好,如预期的那样。只要我有一个有效的SessionID。如果我的SessionID已经过期(或者没有提供),则返回http401(根据需要)。

    templateUrl controller 选项,所有页面(视图)都会自动加载。

    因此,我不太确定在何处/如何拦截http401,以便正确地重定向到 登录

    我想捕获HTTP401错误(或至少其中一个),并向用户提供一个有效的消息(即:“会话已过期”或“需要登录”或重定向到登录页后的内容)。

    提前谢谢。


    我发现如下:

    $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
        console.log("State change error:");
        console.log(" > Event      : ", event);
        console.log(" > toState    : ", toState);
        console.log(" > toParams   : ", toParams);
        console.log(" > fromState  : ", fromState);
        console.log(" > fromParams : ", fromParams);
        console.log(" > error      : ", error);
        //event.preventDefault();
    });
    

    有趣的是 error 参数包含以下内容:

      > error :  {data: {…}, status: 401, headers: ƒ, config: {…}, statusText: ""}
    

    if (error.data.success === false) {
      console.log("Redirecting to 'Sign-in' page...");
      $state.go('sign-in');
    }
    

    剩下的唯一问题是,我有许多状态视图,虽然我可以捕获错误并重定向,但所有其他视图仍然发送到服务器并失败。这是因为它们都是并行发送的吗?我会继续挖的!

    0 回复  |  直到 7 年前