2013-10-23 75 views
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的錯誤。

回答

2

正如你可以看到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'} 
}; 
+0

有趣,謝謝。我擺脫了資源調用中的附加參數,所以它只是$ resource('/ api/updateProduct /:product /:param /:value')。然而,當我執行$ scope.updateProduct.save()時,它會進入POST/api/updateBrand 200 34ms - 2.31kb而不是POST/api/updateBrand/productname/paramater/value 200 34ms - 2.31kb,後端沒有任何反應。有任何想法嗎? – Jascination

+0

您應該保存參數,方法與粘貼您的問題相同:'$ scope.updateProduct.save({0} {0} {scope.post._id, param:'likes', value :$ scope.user._id });' – Beterraba

+0

我已經這樣做了,我會更新上面的問題來澄清一點。 – Jascination

0

首先,你的已經定義了save()有一個名爲「品牌」的參數,但在您的網址模板中,並且在save()的調用中,您正在使用「產品」。我猜這是一個錯字。

你說當你使用瀏覽器訪問網址時,它運行良好;但是當angular向同一個url發出PUT請求時,什麼也沒有發生。這表明您的後端被配置爲僅處理此特定url模式的GET請求。因此,您需要確保您的後端正在接受PUT請求。

0

我一直在努力解決這個問題,並且能夠通過下面的等價調用將參數傳遞給資源(在'save'之前注意'$')。

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

我也沒有在資源中定義'save'方法。根據Angular docs

「調用這些方法(意味着非GET方法)使用給定的方法,params和headers在url模板上調用$ http當數據從服務器返回時,該對象是資源類型和所有非GET方法都可以使用$ prefix,這使您可以輕鬆地在服務器端數據上支持CRUD操作(創建,讀取,更新,刪除)。「