AngularJS在使用method:POST时$resource调用错误的API URL
AngularJS $resource calls the wrong API URL when using method:POST
不是最容易放入标题中的问题。
无论如何,我的应用程序是建立在nodejs
/expressjs
上,并为URL设置了一个API:
编辑:我正在使用的当前代码是:
$scope.updateProduct = $resource('/api/updateProduct/:product/:param/:value',{},{
query: {method:'GET'},
post: {method:'POST'},
save: {method:'PUT', params: {brand: '@brand', param:'@param', value:'@value'}},
remove: {method:'DELETE'}
});
$scope.updateProduct.save({
product : $scope.post._id,
param: 'likes',
value: $scope.user._id
});
目前,它调用/api/updateProduct
而不是像我执行$scope.updateProduct.get()
时那样/api/updateProduct/<product>/<param>/<value>
。
在我的控制台中,我看到(例如):
PUT /api/updateBrand/Quay%20Eyewear%20Australia/userTags/sunglasses,%20classic 200 30ms - 2.31kb
但是,实际上并未访问 API/没有任何反应。有趣的是,如果我在浏览器中转到localhost:5000/api/updateBrand/Quay%20Eyewear%20Australia/userTags/sunglasses,%20classic
,它会发布正确的数据并更新数据库中的产品,因此调用$resource
的方式肯定是错误的。
正如您在 ngResource 文档中看到的,$resource
接收 3 个参数:
$resource(url[, paramDefaults][, actions]);
您将操作作为参数传递。
正确的版本是:
$scope.updateProduct = $resource('/api/updateProduct/:product/:param/:value',{}, {'save':{method:'POST'}});
请注意,这甚至不是必需的,因为当您使用 $resource
时,您已经创建了默认方法:
{
'get': {method:'GET'},
'save': {method:'POST'},
'query': {method:'GET', isArray:true},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'}
};
首先,您已经将save()
定义为具有一个名为"brand"的参数,但是在您的 url 模板和对 save()
的调用中,您使用的是"product"。我想这是一个错字。
你说当你使用浏览器访问网址时,它工作得很好;但是当angular向同一个url发出PUT请求时,什么都没有发生。这表示您的后端配置为仅处理此特定 URL 模式的 GET 请求。因此,您需要确保您的后端接受 PUT 请求。
我一直在努力解决这个问题,并且能够通过执行下面的等效调用将参数传递给资源(请注意"保存"之前的"$")。
$scope.updateProduct.$save({
product : $scope.post._id,
param: 'likes',
value: $scope.user._id
});
我也没有在资源中定义"保存"方法。 根据Angular docs:
"调用这些方法(意味着非GET方法)使用给定的方法,参数和标头在url模板上调用$http。当从服务器返回数据时,该对象是资源类型的实例,并且所有非 GET 方法都带有 $ 前缀。这使您可以轻松支持对服务器端数据的 CRUD 操作(创建、读取、更新、删除)。
- 如何对具有多个$resource调用的角度控制器进行单元测试
- 在 api 调用$resource显示错误和成功消息
- Angular$resource调用不被Access Control Allow使用Safari接受,而被Chrome接
- AngularJs:在内部调用$http或$resource时,让方法同步返回
- AngularJS在使用method:POST时$resource调用错误的API URL
- 如何使用 agluar ng-resource 在 Web API 中调用特定的 get 方法
- AngularJS:$resource未调用自定义方法
- 使用$resource从angular js调用rest api
- 未能在Chrome中加载resource+$.ajax调用
- 未发出请求的指令调用了Angularjs$resource
- $resource中的数据未同步到从HTML调用
- 如何将AngularJS的$resource调用存储在一个数组中,然后一起执行
- Angular $resource在api初始化后被调用,导致返回空值
- Angularjs $resource如何调用多个服务
- 使用angularjs $resource从web api调用自定义方法
- 在AngularJS中对$resource调用的结果进行排序
- Cordova + Angularjs -为什么从回调函数内部调用$resource(或$http)会返回404
- AngularJS $resource -在X毫秒后调用回退URL
- 如何在Angular中调用$resource
- Angularjs: $resource随着$http调用而改变