Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?_Rest_Angularjs - Fatal编程技术网

Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?

Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?,rest,angularjs,Rest,Angularjs,我以本文为例实现了一个REST/CRUD后端:。我让MongoDB在本地运行,我没有使用MongoDB 我遵循了使用ngResource和工厂模式的Google教程,我有查询(获取所有项目)、获取项目(获取)、创建项目(发布)和删除项目(删除)功能。我很难按照后端API所希望的方式实现PUT——对包含id(…/foo/)和更新数据的URL的PUT 我有以下代码来定义我的服务: angular.module('realmenServices', ['ngResource']). facto

我以本文为例实现了一个REST/CRUD后端:。我让MongoDB在本地运行,我没有使用MongoDB

我遵循了使用ngResource和工厂模式的Google教程,我有查询(获取所有项目)、获取项目(获取)、创建项目(发布)和删除项目(删除)功能。我很难按照后端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('/');
    });
}
但是当我调用update函数时,URL不包含ID值:它只是“/realmen”,而不是“/realmen/ID”

我尝试过各种解决方案,包括添加“RealMen.prototype.update”,但仍然无法在URL上显示entryId。(看起来我还必须自己构建只包含DB字段值的JSON——POST操作在创建新条目时自动为我执行,但在查看/编辑单个条目时,似乎没有一个数据结构只包含字段值)

是否有一个示例客户端应用程序以预期的RESTful方式使用所有四个动词


我还看到了Restangular和另一个覆盖$save的解决方案的引用,以便它可以发布POST或PUT()。这项技术似乎变化如此之快,以至于似乎没有一个好的参考解决方案可以作为示例。

因为您的
update
使用PUT方法,
{entryId:$scope.entryId}
被视为数据,要告诉用户从PUT数据生成角度,您需要添加
参数:{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'}
});

修复:更新行中缺少一个右大括号。

我是Restanglar的创建者

您可以看看这个CRUD示例,看看如何在不需要进行URL配置和$resource配置的情况下放置/POST/GET元素。此外,您还可以使用嵌套资源,而不需要进行任何配置:)

看看这个例子:

您也可以在这里查看自述文件和文档

如果您需要一些不存在的功能,只需创建一个问题。我通常会在一周内添加所需的功能,因为我的所有AngularJS项目都使用此库:)


希望有帮助!

您可以通过这种方式实现

$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
文件:


希望它能有所帮助

非常感谢jaux,这很有效!现在,对于问题的第二部分,我如何将表单字段中的数据作为数据传递到PUT,与POST相同?这是另一个问题。创建一个新的特定问题,包括角度和HTML代码。我们为什么定义entryId值开头带有@符号?@entryID“这个@符号是什么意思?如果我不使用它会发生什么情况?@ankakusu因为url
:entryID
{entryID:@entryID}中有一个参数
是告诉angular在哪里找到该参数的值。在这种情况下,它意味着使用数据中
entryId
属性的值作为url中
:entryId
参数的值。谢谢,MGONO,我现在正在查看它。谢谢共享。是否可以将所有DB操作移到工厂中以便可以重用通过应用程序?任何代码示例都将不胜感激。感谢链接我的文章:)我发现我的方法是获得Angular JS(目前)满足的完整RESTful约定的唯一方法。我们已经在几个项目中使用了它。唯一真正的问题是,表示它是新记录还是现有记录的id字段当前不可配置,但通过app.config可以轻松更新。