2014-01-21 82 views
4

我正在開發與angular.js的web應用程序,我目前有點困惑什麼是處理錯誤的正確方法。在我的應用程序中,我使用了ngResource來調用服務器的其餘API。所以我會有很多ngResource API調用。如何正確處理服務器端錯誤?

例如用戶資源,有user.query(),user.get(),user.save()...... 我是否會錯誤回調到所有的ngResource API調用? 只是爲了處理各種錯誤:像服務器停機或沒有互聯網接入?

我只是不認爲把每個ngResource API調用中的錯誤回調是一個好主意。這會產生大量冗餘代碼,並使我的代碼不整齊。

你會怎麼做來處理各種錯誤類型?

回答

8

您可以使用攔截器和做任何你想做的時候發生錯誤:

var app = angular.module("myApp", []); 

app.config(function ($provide, $httpProvider) { 
    $provide.factory('ErrorInterceptor', function ($q) { 
     return { 
      responseError: function(rejection) { 
       console.log(rejection); 
       return $q.reject(rejection); 
      } 
     }; 
    }); 

    $httpProvider.interceptors.push('ErrorInterceptor'); 
}); 

有了這個攔截器可以讀取的狀態代碼,做你所需要的(一個完美的使用情況是重定向用戶如果狀態碼是401,則登錄頁面)。

由於ngResource使用$ http,當您調用資源方法時,攔截器也將被執行。

當然,你可以做更多的事情,並在做出請求之前/之後添加攔截器。

看到完整的文檔在這裏:http://docs.angularjs.org/api/ng.$http

看到這個小提琴:http://jsfiddle.net/4Buyn/的工作示例。

+0

謝謝,Mickael。我認爲攔截器是實現全局錯誤處理的方式。 –