この記事の例に従ってREST/CRUDバックエンドを実装しました。 http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express -and-mongodb / 。 MongoDBをローカルで実行していますが、MongoLabsを使用していません。
NgResourceとFactoryパターンを使用するGoogleチュートリアルに従い、クエリ(すべてのアイテムを取得)、アイテムの取得(GET)、アイテムの作成(POST)、アイテムの削除(DELETE)が機能しています。バックエンドAPIが望むようにPUTを実装するのが困難です-id(.../foo /)を含み、更新されたデータも含むURLへのPUTです。
サービスを定義する次のコードがあります。
angular.module('realmenServices', ['ngResource']).
factory('RealMen', function($resource){
return $resource('http://localhost\\:3000/realmen/:entryId', {}, {
query: {method:'GET', params:{entryId:''}, isArray:true},
post: {method:'POST'},
update: {method:'PUT'},
remove: {method:'DELETE'}
});
このコントローラーコードからメソッドを呼び出します。
$scope.change = function() {
RealMen.update({entryId: $scope.entryId}, function() {
$location.path('/');
});
}
しかし、更新関数を呼び出すと、URLにはID値が含まれません。「/ realmen/ID」ではなく、「/ realmen」のみです。
「RealMen.prototype.update」の追加を含むさまざまなソリューションを試しましたが、それでもentryIdを取得してURLに表示できません。 (また、DBフィールド値のみを保持するJSONを自分で構築する必要があるようです。新しいエントリを作成するときにPOST操作が自動的にそれを行いますが、単一のエントリを表示/編集しているときにフィールド値のみを含むデータ構造)。
4つの動詞すべてを予想されるRESTfulな方法で使用するクライアントアプリケーションの例はありますか?
また、Restangularおよび$ saveをオーバーライドする別のソリューションへの参照を見て、POSTまたはPUTを発行できるようにしました( http://kirkbushell.me/angular-js-using- ng-resource-in-a-more-restful-manner / )。このテクノロジーは急速に変化しているため、人々が例として使用できる優れた参照ソリューションはないようです。
私はRestangularの作成者です。
このCRUDの例を見て、必要なURL構成と$ resource構成をすべて使用せずに要素をPUT/POST/GETする方法を確認してください。それに加えて、設定なしでネストされたリソースを使用できます:)。
このplunkrの例をご覧ください:
http://plnkr.co/edit/d6yDka?p=preview
READMEを参照して、ここでドキュメントを確認することもできます https://github.com/mgonto/restangular
そこにない機能が必要な場合は、問題を作成してください。私はすべてのAngularJSプロジェクトにもこのライブラリを使用しているため、通常1週間以内に求められる機能を追加します:)
それが役に立てば幸い!
update
はPUTメソッドを使用しているため、{entryId: $scope.entryId}
はデータと見なされ、angularがPUTデータから生成されるようにするには、update
を定義するときにparams: {entryId: '@entryId'}
を追加する必要があります。
return $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'}
});
修正:更新行に閉じ中括弧がありませんでした。
この方法で実装できます
$resource('http://localhost\\:3000/realmen/:entryId', {entryId: '@entryId'}, {
UPDATE: {method: 'PUT', url: 'http://localhost\\:3000/realmen/:entryId' },
ACTION: {method: 'PUT', url: 'http://localhost\\:3000/realmen/:entryId/action' }
})
RealMen.query() //GET /realmen/
RealMen.save({entryId: 1},{post data}) // POST /realmen/1
RealMen.delete({entryId: 1}) //DELETE /realmen/1
//any optional method
RealMen.UPDATE({entryId:1}, {post data}) // PUT /realmen/1
//query string
RealMen.query({name:'john'}) //GET /realmen?name=john
ドキュメント: https://docs.angularjs.org/api/ngResource/service/$resource
それが役に立てば幸い