2

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

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

首先它发出一个 GET 请求

http://localhost:8080/things/100

但在那之后它PUTs

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

我希望它 PUT 到它来自的相同 URL,而不是将 urlhttp://localhost:8080/things/100视为列表,然后尝试在100其中查找实体。

我只是想让这个 PUT 回到http://localhost:8080/things/100. 我究竟做错了什么?

编辑:

如果我用这个取而代之,PUT效果很好。但我本来希望能够用这种all方法做到这一点。

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

而且,为了清楚起见,这是我定义的地方ThingsAPI

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

1 回答 1

2

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

如您所见,Restangular 误解了您的意图资源定义,例如。PUT将生成错误的路线。

正如您似乎发现的那样,将其视为资源 100的标识符将纠正问题:thingsThingsAPI.one('things', 100).get()

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

于 2013-10-29T07:47:00.500 回答