2016-01-20 53 views
0

有没有一种很好的方法来捕获有关连接问题的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 

我怎样才能显示正确的信息给用户,让他/她知道确切的错误是什么?

+4

的可能的复制[在角$ http服务,我怎么能捕获错误的 “地位”?](http://stackoverflow.com/questions/27507678/in-angular-http-service-how-can-i-catch-the-status-of-error) –

+0

更好的使用try/catch throw的方法 – amoeba

+0

为什么是@amoeba? – maurycy

回答

0

您可以使用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); 
    } 

}); 

我认为这是一个很好的方法。

+0

我认为这是一个很好的答案,但很糟糕的解释哈哈。请解释您可以在哪里访问错误对象,可能使用console.log语句来执行此操作。我也相信这是一种通用的方法来处理所有http错误,而不必在每次都拒绝承诺时处理它们。请确认Serginho – danday74

+0

谢谢@ danday74 – Serginho

0
$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>