2016-01-20 3 views
0

Есть ли хороший способ уловить ошибки в Угловом вопросе о проблемах со связью?

служба $ 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

Я думаю, что это хороший ответ, но плохо объясненный LOL. Пожалуйста, объясните, где вы хотите получить доступ к объекту ошибки, возможно, используя инструкцию 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> 
Смежные вопросы