在Restangular中获取不正确的路径。我究竟做错了什么?

时间:2013-09-23 11:54:27

标签: angularjs restangular

这是一个微型概念证明。它取出#100的东西然后保存它。

var things = ThingsAPI.all("things");
things.one(100).get()
.then(function(thing) {
  thing.put();
})

首先它向

发出GET请求
http://localhost:8080/things/100

但在此之后它将PUT转移到

http://localhost:8080/things/100/100

我希望它能将PUT转换为相同的网址,而不是将网址http://localhost:8080/things/100视为列表,然后尝试在其中找到实体100

我只想让它回到http://localhost:8080/things/100。我做错了什么?

编辑:

如果我用这个取而代之,那么PUT ting就可以了。但我希望能够使用all方法执行此操作。

ThingsAPI.one('things', 100).get()

而且,为了清楚起见,我在这里定义ThingsAPI

app.factory('ThingsAPI', function(Restangular) {
  return Restangular.withConfig(function(RestangularConfigurer) {
            RestangularConfigurer.setBaseUrl('http://localhost:8080/');
  });
});

1 个答案:

答案 0 :(得分:2)

原因是您将100视为things的嵌套资源。因此,Restangular将生成路由,就好像http://localhost:8080/things/100是名为100的资源的索引路由一样 - 尽管它实际上是things资源的显示路由,其标识为100。这些路线偶然碰巧具有相同的URI。

正如您所看到的,Restangular误解了您的意图资源定义,例如。 PUT将生成错误的路由。

100作为things资源的标识符进行处理将更正此问题,因为您似乎已经发现:ThingsAPI.one('things', 100).get()

这转换为one(resource, identifier).get()