4

不是最容易放入标题的问题。

无论如何,我的应用程序是建立在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()

在我的控制台中,我看到(例如):

 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是调用方式的错误。

4

3 回答 3

3

正如您在ngResource docs中看到的,$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'} 
};
于 2013-10-23T12:27:22.383 回答
0

我一直在努力解决这个问题,并且能够通过执行下面的等效调用将参数传递给资源(注意“保存”之前的“$”)。

$scope.updateProduct.$save({
    product : $scope.post._id, 
    param: 'likes', 
    value: $scope.user._id
});  

我也没有在资源中定义“保存”方法。根据Angular 文档

“调用这些方法(意味着非 GET 方法)使用给定的方法、参数和标头在 url 模板上调用 $http。当从服务器返回数据时,该对象是资源类型的实例,并且所有非-GET 方法带有 $ 前缀。这使您可以轻松地支持对服务器端数据的 CRUD 操作(创建、读取、更新、删除)。

于 2013-12-19T07:34:03.057 回答
0

首先,您已经定义了save()一个名为“brand”的参数,但是在您的 url 模板和对 的调用中save(),您使用的是“product”。我想这是一个错字。

您说当您使用浏览器访问该网址时,它运行良好;但是当 angular 向同一个 url 发出 PUT 请求时,什么都没有发生。这表明您的后端配置为仅处理此特定 url 模式的 GET 请求。因此,您需要确保您的后端正在接受 PUT 请求。

于 2013-10-25T13:41:07.053 回答