web-dev-qa-db-ja.com

Restangular:埋め込み配列を含むオブジェクトを含むgetList

AngularJSプロジェクトではRestangular getListメソッドを使用しようとしていますが、API応答が直接配列ではなく配列を含むオブジェクトであるため、エラーが返されます。

{
  "body": [
    // array elements here
  ],
  "paging": null,
  "error": null
}

Restangularエラーメッセージは次のとおりです。

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

探している配列がbodyプロパティ内にあることをRestangularに伝えることは可能ですか?

21
Guilhem Soulas

はい、 Restangularのドキュメント を参照してください。次のように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;
});

Edit:RestangularのAPIが変更されたようで、現在使用しているメソッドはaddResponseInterceptorです。 。渡された関数にいくつかの調整が必要になる場合があります。

22
Mikke

Custom Methods のcustomGETを使用する必要があると思います

Restangular.all("url").customGET(""); // GET /url and handle the response as an Object

19
Thram

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;
        });

});
6
Ouadie