AngularJS $ resource'GET'访问正确的API,但是'PUT'和'POST'不会

当使用方法:POST时 ,从AngularJS $资源的后续调用错误的API URL

我的控制器是这样设置的,使用Angular的$resource

 $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 }); 

我的服务器在NodeJSExpressJS上运行。 在我的控制台中,当save操作被调用时,我可以看到:

 POST /api/updateBrand/<productid>/likes/fun,%20quirky%20loud,%20boho,%20hippy 200 22ms - 2.31kb 

但是,我的API没有正确访问。 例如,如果我在浏览器中访问上面的URL,就会调用API函数,并更新我的数据库(并在我的服务器控制台中报告)。 然而,当Angular在这个URL上做了一个PUT ,什么也没有发生。

有趣的是,当我将$scope.updateProduct.save()更改$scope.updateProduct.save() $scope.updateProduct.get() ,正确调用了API并且一切正常。

任何想法发生了什么?

编辑:这是服务器设置:

ExpressJS API设置:

  app.get('/api/updateProduct/:product/:param/:value', api.updateProduct); 

API code

 exports.updateProduct = function (req, res) { console.log("TEST") var product = req.params.product; var param = req.params.param; var value = req.params.value; var props = { $push: {} }; if(param == 'userTags'){ var oldVal = value; value = oldVal.match(/[-'"\w]+/g); props.$push[param]; props.$push[param] = {$each: []}; props.$push[param].$each = value; }else{ var props = { $push: {} }; props.$push[param] = value; } db.products.update({"_id": ObjectId(product)}, props, function (err, record) { if (err || !(record)) { console.log("Lookup Error: " + err); } else{ console.log("Updated " + product + " with " + param); console.log(record); res.json({obj:record}) } }); }; 

看来你的服务器不是在等待POST或者PUT请求,而是根据你的configuration获得一个GET请求。

 app.get('/api/updateProduct/:product/:param/:value', api.updateProduct); 

根据ExpressJS API( http://expressjs.com/api.html ),您应该能够用任何有效的http动词replaceget。

 app.VERB(path, [callback...], callback) app.post('/api/updateProduct/:product/:param/:value', api.updateProduct); app.put('/api/updateProduct/:product/:param/:value', api.updateProduct);