2013-10-26 105 views
1

在Angular中,我發出$ http請求,並且想要返回錯誤消息,但不知道如何。

In Express我想在出現錯誤時執行以下操作(或類似操作)。

res.send(400, { errors: 'blah' }); 

在角目前,我有這樣的:

$http.post('/' ,{}).then(function(res) { }, function(err) { 
    console.log(err) // no errors data - only 400 error code 
}); 

我怎樣才能從內部角度訪問 「錯誤」(即 「嗒嗒」)?

+0

請詳細解釋你想要什麼。如果這是你想要的,可以從服務器發送自定義標頭來設置http狀態和文本。總體目標不明確。另一個應用是在'success'內發回消息作爲json的一部分,並且相應地對客戶端做出反應 – charlietfl

回答

1

$ HTTP消息提供,成功和錯誤功能:

$http({method: 'GET', url: '/someUrl'}). 
success(function(data, status, headers, config) { 
// this callback will be called asynchronously 
// when the response is available 
}). 
error(function(data, status, headers, config) { 
// called asynchronously if an error occurs 
// or server returns response with an error status. 
}); 

如果出現錯誤,就像一個服務器錯誤,或其他HTTP埃羅誤差函數即被觸發,你可以捕獲的錯誤。

如果別的事情觸發,或者您必須提供某種反饋給用戶,可以使用成功的方法,但返回的數據作爲domething別人是這樣的:在成功的功能

data {message: 'your message here', success: /*true or false*/, result: /*some data*/ } 

然後:

$http({method: 'GET', url: '/someUrl'}). 
success(function(data, status, headers, config) { 
    if(data.success) { 
    // do stuff here 
    } 
    else { 
    // show the error or notification somewhere 
    } 
}). 
error(function(data, status, headers, config) { 
    //do stuff if error 400, 500 
}); 
+0

所以你說沒有辦法返回關於http錯誤的反饋? – cyberwombat

+0

我剛剛發佈你應該如何做到這一點 – Fals

+0

我澄清了我的帖子。基本上我想填充錯誤回調中的「數據」字段。然而,將第二個參數傳遞給我的Express res.send調用(在這種情況下,錯誤:「blah」)似乎不會落在數據字段中。 – cyberwombat

0

我知道這是一個老問題,但..我相信你想要的是:

angular.module('App').factory('MainFactory', function($http) { 
    return { 
    post: function(something) { 
     $http 
     .post('/api', something) 
     .then(function(result) { 
      return result.data; 
     }, function(err) { 
      throw err.data.message; 
     }); 
    } 
    }; 
}); 

和來自一個控制器

angular.module('App').controller('Ctrl', function($scope, MainFactory) { 
    $scope.something_to_send = "something" 
    MainFactory 
     .post($scope.something_to_send) 
     .then(function(result){ 
     // Do something with result data 
     }, function(err) { 
     // showError(err); 
    }); 
});