正确处理$ http调用中的错误AngularJS
问题描述:
有没有一种很好的方法来捕获有关连接问题的Angular中的错误?
服务$ HTTP POST:
dossierService.getDossier(uid)
.then(function (result) {
vm.dossier = result.dossier;
}, function (error) {
handleError(error)
});//end dossierService.getDossier(uid)
如果出现连接问题,它会返回一个错误:
POST http://192.168.25.1:8080/api/query net::ERR_CONNECTION_TIMED_OUT
我怎样才能显示正确的信息给用户,让他/她知道确切的错误是什么?
答
您可以使用http响应代码创建一个对象并链接一条消息。要抛出这些错误,你可以使用拦截器。
moduleError.factory('HttpErrorHandler', function(){
return {
401: 'You are not logged in',
403: 'You do not have permissions'
}
});
$httpProvider.interceptors.push(function($q, HttpErrorHandler) {
return {
'responseError': function(rejection) {
console.log(HttpErrorHandler[rejection.status]);
};
});
如果错误与此操作有关,请在启动时启动错误。您可以将错误代码400与身体中的对象一起扔出,例如:
{
code: 30002, //Thats your custom code
message: 'My custom error message'
}
。
dossierService.getDossier(uid)
.then(function (result) {
vm.dossier = result.dossier;
}, function (error) {
if(error.status == 400){
var my_error = JSON.parse(error.data);
console.log(my_error.message);
}
});
我认为这是一个很好的方法。
答
$http.post("/path", {data:"data"}).then(function(response){
// do something with success response
}).catch(function(error) {
console.log(JSON.stringify(error));
$scope.myerror=error
});
,并在您的视图...
<div ng-if="myerror!=null">
{{myerror}} OR {{myerror.message}}
</div>
的可能的复制[在角$ http服务,我怎么能捕获错误的 “地位”?](http://*.com/questions/27507678/in-angular-http-service-how-can-i-catch-the-status-of-error) –
更好的使用try/catch throw的方法 – amoeba
为什么是@amoeba? – maurycy