【问题标题】:Is it possible to perform a Restangular GET with multiple query parameters?是否可以使用多个查询参数执行 Restangular GET?
【发布时间】:2015-04-29 14:00:55
【问题描述】:

我一直在尝试使用多个查询参数(用于简单的分页)执行 Restangular GET,但这似乎是不可能的——至少对于我正在尝试做的事情。这是我正在尝试做的事情:

Restangular.all('elevation').get({ pageParam: page, pageSizeParam: pageSize }).then(function(data) {
    console.log(data);
});

预期的响应类似于:

{ totalRecords: 233, elevations: {...} }

这不起作用并导致以下结果:

GET http://localhost:24287/elevation/[object%20Object] 404(未找到)

我也尝试使用customGET,这会导致与上述相同的问题。

我实际上能够传递多个查询参数的唯一方法是使用getList。不幸的是,当使用getList 时,会引发以下错误:

错误:getList 的响应应该是一个数组,而不是一个对象或其他东西

要解决此问题,Restangular 文档在 My response is actually wrapped with some metadata. How do I get the data in that case? 部分中指出我需要使用 addResponseInterceptor,我已经这样做了:

 RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
  var newResponse = [];
  if(response.data.totalRecords !== undefined) {
    newResponse.elevationData= {};
    newResponse.elevationData.totalRecords = response.data.totalRecords;
    newResponse.elevationData.elevations = response.data.elevations;
  }
  return newResponse;
});

这个复杂的解决方案确实有效。难道没有更简单的方法可以简单地使用多个查询参数调用 Restangular 的 get 并返回一个对象吗?

此时,将 Restangular 排除在外并像这样简单地使用 $http 服务会容易得多:

$http.get('http://localhost:24287/elevation?page=' + page + '&pageSize=' + pageSize).then(function(result) {
    console.log(result.data.totalRecords);
    console.log(result.data.elevations);
});

虽然我真的很想用 Restangular 找到更好的方法。

任何想法将不胜感激!谢谢!

【问题讨论】:

  • 这对ng-newsletter.com/posts/restangular.html@页面的按钮有帮助吗?
  • 感谢您的链接,尽管它看起来与文档基本相同,但有更好的示例:)。
  • 对不起,我试过了...我停止使用restangular并开始使用angulars原生工具,因为它们似乎有更好的文档记录。
  • 同意——我自己很快就会朝那个方向前进。它似乎更容易工作。

标签: angularjs restangular


【解决方案1】:

这非常简单,在没有 id 的情况下查询资源 URL,即使使用特定的查询参数,并且返回单个对象也不是 RESTful。

错误:getList 的响应应该是一个数组,而不是一个对象或其他东西

它准确地告诉了你真相:你的查询可能返回一个数组,因为你没有指定一个唯一标识符(其他所有东西都不是唯一的)。

此时,将 Restangular 排除在外并简单地使用 $http 服务会容易得多

当然,由于 Restangular 专注于 RESTful 资源代理,否则您将不得不对其进行调整(拦截器、customGET 等)

【讨论】:

  • Cyril -- 我不只返回一个对象,我正在检索一个列表,它只是包含在元数据中(在这种情况下,总记录数是列表本身的兄弟)。我不是在查询唯一 ID,因为我正在寻找所有对象的列表——好吧,在这种情况下,是所有对象的一个​​子集——一个页面。我的全部观点是应该有一种更简单的方法将多个查询参数传递给 Restangular 提供的任何 GET 方法。
  • 斜线。我的全部观点是,我认为你不能,因为 Restangular 专注于 RESTful API。您遵循了正确的路径,Restangular 设计得非常好,它指导您完成了整个过程:1)您首先尝试使用get,意识到您的 API 返回单个 json 对象,并且它不允许您添加一些参数,因为它旨在通过 id 返回单个对象并且不需要任何查询。 2)您尝试查询getList,它告诉您您的API应该返回一个列表,或者需要使用拦截器自定义响应。
  • 确实没那么简单,我应该说。但是,如果您确实想使用 Restangular,则没有任何其他解决方案。你可能认为你不应该是正确的,因为它似乎不符合你的目的。见RESTful
猜你喜欢
  • 2017-05-13
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多