Я знаю, что этот вопрос уже существует на SO (как здесь: Error in resource configuration. Expected response to contain an object but got an array), и даже если я уже сталкивался с этой ошибкой несколько дней назад, я не нашел почему я получаю это сейчас.
С одной стороны, у меня есть RESTful API в Node Express
. Это дает мне доступ к базе данных, где я пытаюсь получить некоторые данные. При использовании конкретного $resource
запроса, я получаю эту JSON (протестировано с Postman):
[
{
"ref": 2,
"type": "string here",
"matriculeMD": 4567,
"name": "William",
"date": "2016-09-14T22:00:00.000Z",
"client": 1
},
{
"ref": 4,
"type": "string here",
"matriculeMD": 1589,
"name": "Averell",
"date": "0000-00-00",
"client": 1
}
]
С другой стороны, у меня есть приложение Угловая JS. Это один использовать завод, чтобы получить данные от API:
.factory('Things', ['$resource', function($resource) {
return $resource(
'api_url/:client_id',
{client_id: '@client_id'}, // getting some data from an ID
{'query' : {
method : 'GET', // ofc, it's a get request in the API
isArray : false // to be sure to get an object and not an array
}
}
У меня также есть контроллер, который использует этот завод, пытается выполнить запрос с парами:
app.controller('ctrl', ['$scope','Things', function ($scope,$things)
{
$scope.thing = $things.query({},{'client_id':'1'});
// replacing '@client_id' from factory with 1. I also tried with quoteless 1.
}
]);
И, наконец, У меня есть html-представление, где я пытаюсь использовать данные, которые я должен получить в $scope.thing
с некоторыми <div ng-repeat'thing in things'>{{thing.ref}}</div>
.
Прочитав другие сообщения, я был уверен, что добавление на заводе isArray : false
устранит проблему, поскольку она уже зафиксировала его на другом заводе.
Любая идея?
Редактировать: Спасибо за ваши ответы. Я изменил свой заводской код с:
.factory('Things', ['$resource', function($resource) {
return $resource(
'api_url/:client_id',
{client_id: '@client_id'}, // getting some data from an ID
{'query' : {
method : 'GET', // ofc, it's a get request in the API
isArray : true //
}
}
И исправлена ошибка. Теперь я работаю над другой проблемой с моим $scope
содержимым, которое не определено и отправлено $promise : Promise, $resolved : Resolved
. Я читал $resource
doc, чтобы понять, что это значит, но я до сих пор не знаю, как заставить его работать.
Так что ваш API возвращает массив после всего? isArray не будет преобразовывать данные, он просто подскажет, какую структуру данных ожидать. – doldt