当使用方法:POST时,AngularJS $资源调用错误的API URL
放入标题不是最简单的问题。
无论如何,我的应用程序是build立在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
而不是/api/updateProduct/<product>/<param>/<value>
就像我执行$scope.updateProduct.get()
时的$scope.updateProduct.get()
。
在我的控制台中,我看到(作为一个例子):
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]);
您正在将您的操作作为parameter passing。
正确的版本将是:
$scope.updateProduct = $resource('/api/updateProduct/:product/:param/:value',{}, {'save':{method:'POST'}});
请注意,它甚至没有必要,因为当您使用$resource
您已经创build了默认的方法:
{ 'get': {method:'GET'}, 'save': {method:'POST'}, 'query': {method:'GET', isArray:true}, 'remove': {method:'DELETE'}, 'delete': {method:'DELETE'} };
首先,你已经定义了save()
有一个叫做“brand”的参数,但是在你的url模板和save()
的调用中,你使用的是“product”。 我想这是一个错字。
你说当你使用浏览器访问url时,效果很好; 但是当angular度是一个PUT请求到相同的url,什么都没有发生。 这表明你的后端被configuration为只处理这个特定的url模式的GET请求。 因此,您需要确保您的后端正在接受PUT请求。
我正在努力解决这个问题,并且能够通过下面的等价调用将parameter passing给资源(在'save'之前注意'$')。
$scope.updateProduct.$save({ product : $scope.post._id, param: 'likes', value: $scope.user._id });
我也没有在资源中定义“保存”方法。 根据Angular文档 :
“调用这些方法(意味着非GET方法)使用给定的方法,params和headers在url模板上调用$ http。当从服务器返回数据时,对象是资源types的一个实例,所有的非-GET方法可以使用$ prefix,这使得您可以轻松地在服务器端数据上支持CRUD操作(创build,读取,更新,删除)。