Обработка внутренней ошибки сервера HTTP 500 в AngularJS

#angularjs #ajax #ionic-framework

#angularjs #ajax #ionic-framework

Вопрос:

Я создаю приложение с помощью ionic и хочу обработать внутреннюю ошибку сервера 500, которая возникает при вызове AJAX $ http(). Возможно ли создать какие-либо перехватчики для обработки этого?

вот мой код контроллера:

 .controller('RegistrationController',function($scope,$http){
     $scope.doRegistration = function(){
           $http({
                method : "POST",
                url : BASE_URL,
                params : {
                        //sending the parameters as JSON
                }
           }).then(function successCallback(response){
                 if(response.status == 200)
                     //handling the response sent by server
           },function errorCallback()});
     };
});
  

если пользователь вводит некоторые недопустимые входные данные, и сервер не может их обработать, он выдает внутреннюю ошибку сервера 500. Когда выполняется вызов AJAX, я показываю счетчик, и когда возникает какая-либо ошибка сервера, я должен остановить вызов AJAX и остановить счетчик и показать пользователю всплывающее окно с сообщением «Обнаружена ошибка сервера».

Ответ №1:

 'use strict';

angular.module('myApp').factory('MyService', function ($http, $q) {

var BASE_URL = 'some.url.com';

function register() {

   var defer = $q.defer();

   $http({method: "POST", url: BASE_URL, params: {}})
     .then(function (response) {
        defer.resolve(response.data);
   })
   .catch(function (reason) {
      defer.resolve(reason);
   });

 return defer.promise;
}


return {
 register: register
}

}).controller('MyController', function ($scope, MyService) {

   MyService.register().then(function (response) {
     // success
   }).catch(function (reason) {
     // err
     if (reason.status === 500) {
        // do something
        $scope.spinner = false;
        console.log('Encountered server error');
     }
  });
});
  

Ответ №2:

вы можете создать перехватчик, как показано ниже —

 app.factory('testResponseInterceptor', function ($q ,$rootScope,$location) {
return {
    response: function (response) {
        //correct response
        return response;
    },
    responseError: function (response) {
        //error in response
    }
  };
});
  

и настройте ее в своем модуле —

 app.config(function ($httpProvider) {
   $httpProvider.interceptors.push('testResponseInterceptor');
 });