Angular JS:REST / CRUD后端的GET / POST / DELETE / PUT客户端的完整示例?
我已经实现了一个REST / CRUD后端,以下面这篇文章为例: http : //coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb / 。 我有MongoDB在本地运行,我没有使用MongoLabs。
我已经遵循了使用ngResource和工厂模式的Google教程,并且我有查询(获取所有项目),获取项目(GET),创build项目(POST)以及删除项目(DELETE)。 我很难实现PUT后端API需要的方式 – 包含id(… / foo /)的URL,还包含更新的数据。
我有这样的代码来定义我的服务:
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”,而不是“/ realmen / ID”。
我已经尝试了各种解决scheme,包括添加“RealMen.prototype.update”,但仍然无法获得entryId显示在URL上。 (它也看起来像我将不得不build立自己的DB字段值的JSON – POST操作为我自动创build一个新的条目,但似乎没有一个数据结构,只包含当我查看/编辑单个条目时的字段值)。
有没有一个示例客户端应用程序使用预期的RESTful方式的所有四个动词?
我也看到引用Restangular和另一个解决scheme覆盖$ save,以便它可以发出一个POST或PUT( http://kirkbushell.me/angular-js-using-ng-resource-in-a-more-平静/ / )。 这项技术似乎正在发生如此迅速的变化,似乎没有一个好的参考解决scheme,人们可以用作一个例子。
我是Restangular的创造者。
你可以看一下这个CRUD的例子,看看如何在没有你需要的URLconfiguration和$资源configuration的情况下使用PUT / POST / GET元素。 除此之外,你可以使用嵌套的资源,而不需要任何configuration:)。
看看这个plunkr例子:
http://plnkr.co/edit/d6yDka?p=preview
你也可以看到自述文件,并检查这里的文档https://github.com/mgonto/restangular
如果您需要一些不在的function,请创build一个问题。 我通常添加一个星期内要求的function,因为我也为我所有的AngularJS项目使用这个库)
希望能帮助到你!
因为你的update
使用PUT方法, {entryId: $scope.entryId}
被认为是数据, params: {entryId: '@entryId'}
当你定义你的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
希望能帮助到你