從AngularJS $resource calls the wrong API URL when using method:POST
跟進我的控制器設置這樣的,有角的$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
});
我的服務器在NodeJS
和ExpressJS
上運行。在我的控制檯,當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.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})
}
});
};
你可以顯示你的服務器的代碼? – jpmorin
我可以但它根本沒有被訪問,第一行是一個'console.log(「TEST」)',它沒有被訪問。再一次,當我做'updateProduct.get()'而不是'updateProduct.save()'它工作得很好(所以'console.log()'正確記錄) – Jascination
我認爲你的服務器路由可能有問題。 – jpmorin