Restangular: getList с объектом, содержащим встроенный массив
В моем проекте AngularJS я пытаюсь использовать метод restangular getList, но он возвращает ошибку, потому что ответ API не является непосредственно массивом, а объектом, содержащим массив.
{
"body": [
// array elements here
],
"paging": null,
"error": null
}
Сообщение об ошибке:
Error: Response for getList SHOULD be an array and not an object or something else
Можно ли сказать Restangular, что массив, который он ищет, находится внутри свойства body
?
Ответы
Ответ 1
Да, см. рестатулярная документация. Вы можете настроить Restangular следующим образом:
rc.setResponseExtractor(function(response, operation) {
if (operation === 'getList') {
var newResponse = response.body;
newResponse.paging = response.paging;
newResponse.error = response.error;
return newResponse;
}
return response;
});
Изменить: похоже, теперь теперь изменен интерфейс Restangular API, и лучше использовать текущий метод addResponseInterceptor. Некоторые функции могут потребоваться для переданной функции.
Ответ 2
Я думаю, вы должны использовать customGET из Пользовательских методов
Restangular.all("url").customGET(""); // GET /url and handle the response as an Object
Ответ 3
as Collin Allen предложил использовать addResponseInterceptor следующим образом:
app.config(function(RestangularProvider) {
// add a response intereceptor
RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
var extractedData;
// .. to look for getList operations
if (operation === "getList") {
// .. and handle the data and meta data
extractedData = data.body;
extractedData.error = data.error;
extractedData.paging = data.paging;
} else {
extractedData = data.data;
}
return extractedData;
});
});