4 つの REST 動詞 (GET/POST/PUT/DELETE) をすべて実行するクライアントを作成しようとしていますが、PUT 以外はすべて完了しています。私が取り組んでいる REST/CRUD API は、PUT /realmen/ID-string を呼び出し、キーと値のペアを JSON として含めることによって、エントリを更新したいと考えています。POST の場合、これは「自動的に」機能するように見えますが、PUT では機能しません。
私のHTMLは次のようになります:
<div id="list">
<form novalidate class="edit-form">
<p>Title <input ng-model="realmen.title" type="text" value="{{realmen.title}}" /></p>
<p>Real Men <input ng-model="realmen.realmen" type="text" value="{{realmen.realmen}}" /> </p>
<p>Real Role-Players <input ng-model="realmen.realroleplayers" type="text" value="realmen.realroleplayers}}" /></p>
<p>Loonies <input ng-model="realmen.loonies" type="text" value="{{realmen.loonies}}" /></p>
<p>Munchkins <input ng-model="realmen.munchkins" type="text" value="{{realmen.munchkins}}" /></p>
<input ng-model="realmen.entryId" type="hidden" value="{{entryId}}"/>
<button ng-click="change()">UPDATE ({{entryId}})"</button></p>
</form>
</div>
私のコントローラーは次のようになります。
$scope.realmen = RealMen.get({entryId: $routeParams.entryId}, function() {
$scope.master = angular.copy($scope.realmen); // For resetting the form
});
$scope.change = function() {
console.log($scope.realmen);
RealMen.update({entryId: $scope.entryId}, function() {
$location.path('/');
});
}
最後に、私のサービスは次のようになります。
angular.module('realmenServices', ['ngResource']).
factory('RealMen', function($resource){
var RealMen = $resource(
'http://localhost\\:3000/realmen/:entryId',
{},
{
query: {method:'GET', params:{entryId:''}, isArray:true},
post: {method:'POST'},
update: {method: 'PUT', params:{entryId:'@entryId'}},
remove: {method:'DELETE'}
});
return RealMen;
});
PUT は URL の正しい ID 値で呼び出されますが、リクエスト ペイロードには entryId しか含まれていないため、バックエンド API は期待されるキーと値を取得せず、基本的にデータベース内のレコードを空白にします。
console.log($scope.realmen) には、多くの追加データとともにフォーム フィールドが表示されます。RealMen.update($scope.realmen, ...) を呼び出してみました (.save() の呼び出しと同様) が、これらの余分なフィールドはすべて、URL へのクエリ文字列パラメーターとして見事に醜い方法で追加されます。