Как обрабатывать ответ Restangular .getList(), который не является массивом

#angularjs #restangular

#angularjs #restangular

Вопрос:

API, с которым я работаю, возвращает 200 со строковым сообщением об ошибке, когда клиент не аутентифицирован. Так что, если я вызову:

 var restSvc = Restangular.service('message');
var deferred = restSvc.getList()
 

при аутентификации я получаю обратно массив объектов — но если я вызываю его, когда он не аутентифицирован, я получаю обратно строку «Вызывающий не может быть аутентифицирован».

Проблема в том, что я не могу обработать эту ошибку, потому что Restangular выдает ошибку и не разрешает или не завершает отложенный, потому что он ожидает массив:

 Error: Response for getList SHOULD be an array and not an object or something else
 

Как я могу обработать эту ошибку и получить ответ, даже если это не массив?

Ответ №1:

Одна вещь, которую вы можете сделать, это добавить перехватчик ответов для проверки данных перед их возвратом. Если он соответствует определенному формату, прикрепите его к данным ответа. Например.

 restangularConfig.addResponseInterceptor(function(response, operation) {
    if (operation === 'getList') {
        // Test your data structure here.
    }
    return response;
});
 

Если это ваш собственный API, который вы разрабатываете, я бы настоятельно рекомендовал изменить формат, чтобы он соответствовал каждому запросу. Например.

Если запрос удовлетворительный.

 {
  "status": 200,
  "content": [{},{}...]  
}
 

Если запрос плохой.

 {
  "status": 401, //or what ever error
  "content": []
}