当使用方法: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,读取,更新,删除)。