2013-11-25 29 views
8

我有一個工廠,返回$資源爲我的文章型號:AngularJS資源 - PUT方法沒有得到ID

angular.module('ADI.Resources').factory("Articles", ['$resource', function($resource) { 
    return $resource('/api/v1/article/:articleId', { 
     articleId: '@_id', 
     _shop: window.user._shop 
    }, { 
     update: { 
      method: 'PUT' 
     } 
    }); 
}]); 

GETPOSTDELETE運作良好,但不更新(PUT) 。下面是我的代碼使用方法:做一個更新時使用條款ArticleID參數不填充:

Articles.update({articleId: '300000000000000000000001'}, function(article){ 
    console.log(article); 
}); 

它提出這個要求:

PUT http://localhost:3000/api/v1/article?_shop=100000000000000000000001 

代替:

PUT http://localhost:3000/api/v1/article/300000000000000000000001?_shop=100000000000000000000001 

任何想法,爲什麼?謝謝!

+1

PUT應該發送內容到請求中,而不是在URL中! – Fals

+0

謝謝你的答覆!它實際上就像你說的那樣在內容中發送articleId。我想我在計劃API時犯了一個錯誤。 – doobdargent

回答

7

正如評論中提到的F​​als,articleId參數在請求內容中。所以我做了一個小訣竅,把它也放在URI上。

angular.module('ADI.Resources').factory("Articles", ['$resource', function($resource) { 
    return $resource('/api/v1/article/:articleId', { 
     articleId: '@_id', 
     _shop: window.user._shop 
    }, { 
     update: { 
      method: 'PUT', 
      params: { 
       articleId: "@articleId" 
      } 
     } 
    }); 
}]); 
+0

前段時間由於某些錯誤,我在角度混帳中做了一個問題,他們說這個部分不使用任何參數:'{ articleId:'@_id', _shop:window.user._shop }, '當你不想讓它們在請求中全局可用時......當你沒有在另一個請求中設置它時,並且在你的模型中你有類似的東西時,它會從模型中選擇這個值,並且你的網址將會去野 – deadManN

+0

但今天,我正在寫另一項服務,而當我不使用它們,它發送?查詢字符串:|代替... – deadManN

1

我有同樣的問題,這裏的問題是以下行:

articleId: '@_id', 

該行應該是:不需要重新定義

articleId: '@articleId', 

條款ArticleID。