2017-02-16 75 views
0

我在我的app.js中有一個名爲UserService的工廠,它爲我執行所有用戶HTTP請求。處理成功/錯誤響應http請求angularjs

當我嘗試創建一個用戶時,我有以下方法。

function create(user) { 
    return $http.post(envService.read('apiUrl') + '/auth/register', user).then(handleSuccess, handleError('Error creating user')); 
} 

然後在我的控制我做這樣的事情:

function register() { 
    vm.dataLoading = true; 
    UserService.create(vm.user).then(function successCallback(response) { 
     $location.path('/'); 
     Flash.create('success', response.message); 
    }, function errorCallback(error) { 
     Flash.create('danger', error); 
     vm.dataLoading = false; 
    }); 
} 

函數來處理成功和錯誤

// private functions 

    function handleSuccess(res) { 
     return res.data; 
    } 

    function handleError(error) { 
     return function() { 
      return { success: false, message: error }; 
     }; 
    } 

然而,它總是進入成功回調即使響應代碼是403或其他導致錯誤的其他內容。我在這裏做錯了什麼?

+0

你'handleError'被立即調用。 'then'的參數必須是函數 – charlietfl

+0

'post'看起來應該不是這樣嗎? }'return $ http.post(envService.read('apiUrl')+'/ auth/register',user).then(handleSuccess,function(){handleError('Error creating user')});' – Nope

+0

@Fran那些是jQuery'$ .ajax'回調 – charlietfl

回答

0

在角JS,當您爲「$ HTTP」,你可以選擇不參數設置爲功能類似於

$http.get('/someUrl', config).then(successCallback, errorCallback); 

回調函數或您提供在他們裏面有回調的功能,如

$http({ 
method: 'GET', 
url: '/someUrl' 
    }).then(
     function successCallback(response) {}, 
     function errorCallback(response) {} 
     ); 

在另一方面,如果你想打電話給你自己的功能在回撥,可以選擇這種方式,

 $http(
     { 
     method: this.url.method, 
     url: serviceURL, 
     } 
    ). 
     success(function(data, status, headers, config) { 
      successCallback(data, status, headers, config); 
     }). 
     error(function(data, status, headers, config) { 
     errorCallback(data, status, headers, config); 
     }); 

所以,基本上你的回調函數需要一個「響應」參數包含

  1. 數據 - {字符串|對象} - 與變換函數變換的響應體。
  2. status - {number} - 響應的HTTP狀態碼。
  3. 頭文件 - {function([headerName])} - 頭文件getter函數。
  4. config - {Object} - 用於生成請求的配置對象。
  5. statusText - {string} - 響應的HTTP狀態文本。

在你的代碼中,我會改變 handleError('Error creating user')一些適當的回調,並在回調中接收該對象。

進行了詳細的瞭解,請閱讀this

+0

因此,如果我明顯地選擇第一種方式,而不是設置參數。我可以做以下功能創建(用戶)返回$ http.post(envService.read('apiUrl')+'/ auth/register',user); }並像我現在那樣處理我的控制器中的回調? – Reshad

+0

是的,你可以做到這一點,但在這種情況下,你的控制器內的回調應該有一個「響應」對象作爲參數。 –