这是一个微型概念证明。它取出#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/');
});
});
答案 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()
。