Angular resource.$query() и условие ошибки, возвращающее ответ в виде массива, но необходимо в виде простого объекта

Я использую службу для возврата списка файлов. Эта служба возвращает следующее.

Случай успеха: список файловых объектов в формате json, как указано ниже, с кодом HTTP как 200

[{"_id:"3453534","name":"File 1"},{"_id:"5756753","name":"File 2"}]

Случай сбоя: возвращается ответ об ошибке с сообщением об ошибке в виде кода ошибки HTTP 500.

{errorMessage: "No files found for ptoject id 522b9358e4b0bab2f88a1f67"}

Я использую следующий метод «запроса», чтобы вызвать эту службу.

//get the new value of files as per changed project id
            scope.files = ProjectFile.query({ projectid: scope.project._id }, function (response) {

                //Check if service response is success/fail
                if (response.servicestatus != undefined) {
                    //this is error case. Show error message.
                    alert("Failed to load list of files for this project: " + response.errorMessage);
                }
                else {
                    //update scope
                    scope.files = response;

                }
            });

Проблема, с которой я столкнулся, - это объект ответа, который преобразуется методом $query(). Я получаю ответ в виде массива, который кажется неверным. Не уверен, почему $query() также ожидает ответа об ошибке в виде массива. В случае ошибки; Я получаю ответ в виде массива, как показано ниже

response[0][0]="N";
response[0][1]="o";
response[0][2]="";
response[0][3]="f";
response[0][4]="i";
response[0][5]="l";
response[0][6]="e";
response[0][7]="s";
....
....

Я не уверен, почему $query() ведет себя так. Не уверен, как обращаться с этим правильно. Пожалуйста помоги.


person joy    schedule 07.09.2013    source источник


Ответы (1)


Метод запроса $resource по умолчанию ожидает ответа в виде массива. Запрос не завершается ошибкой, но ответ сервера не дает того, что ожидает query().

Если вы знаете, что только ответы «без файлов» не будут массивами, вы можете проверить, является ли тип ответа массивом, чтобы узнать, было ли что-либо найдено или нет.

В этом ответе описан простой способ проверки:

scope.files = ProjectFile.query({ projectid: scope.project._id }, function (response) {

  //Check if service response is success/fail
  if (response.servicestatus != undefined) {
    //this is error case. Show error message.
    alert("Failed to load list of files for this project: " + response.errorMessage);
  }
  else if ( Object.prototype.toString.call(response) === '[object Array]' ) {
     scope.files = response;
  } else {
    //handle the lack of files found
  }
}
person max    schedule 07.09.2013