25

我的 rest api 接受对以下 url 的 DELETE 请求

/api/users/{slug}

因此,通过将删除发送给指定的用户(slug),该用户将被删除。这是服务代码:

angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id1/:action/:id2', //add param to the url
    {}, 
    { 
        delete_user: {
            method: 'DELETE',
            params: {
                id1:"@id"
            }
        },
        update: {
            method: 'PUT',
            params: {
                id1:"@id"
            }
        }
    }); 

    return User;
}); 

我通过调用删除功能

user.$delete_user({id:user.id}, function(){}, function(response){}); 

但是,请求似乎发送到了错误的 url。

/api/users?id=4

所以实际上缺少参数,结果我得到一个 405 Method not allowed。有没有机会以我的 api 风格发送删除请求?

4

4 回答 4

30

params是您操作中默认请求参数的对象。如果你想要 url 参数,你必须在第二个参数中指定它们,如下所示:

angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id1/:action/:id2', //add param to the url
    {id1:'@id'},
    { 
        delete_user: {
            method: 'DELETE'
        }
    }); 

    return User;
}); 

这适用于:

// user has id
user.$delete_user(function(){
  //success
},function(){
  // error
});

或者

var data = {id:'id_from_data'};
User.delete_user({},data);

或者

var params = {id1:'id1_from_params'};
User.delete_user(params);

我制作了一个plnkr 示例- 您必须打开控制台以验证 DELETE 请求是否正确。

请参阅Angular 资源文档中的parameterDefaults

于 2013-04-23T11:17:11.100 回答
3

我在使用服务添加/删除/更新类别时遇到了这个问题。虽然传入参数以获得它工作正常,但是当删除它时给我一个 ?id=1234 而不是 api/resource/1234

我通过将默认参数设为字符串来解决此问题。

///控制器

Service.delete({categoryId:id}, function(resp){
  console.log(resp)//whatever logic you want in here 
});

//服务

$resource('api/resource/:categoryId', {"categoryId":"@categoryId"}, {
   query:{method:"GET"},
   delete:{method:"DELETE"},

});

应该可以工作并且生成的 url 将是,最初我在默认参数中有 categoryId 作为变量名。

api/resource/1234 etc
于 2016-07-12T09:43:20.133 回答
0

只需省略参数中的“@”

   .factory('reportFactory', ['$resource', 'baseUrl', function ($resource, baseUrl) {
        return $resource(baseUrl + '/keys/:id', {}, {
        delete: { method: 'DELETE',
            headers: {
                'Content-Type': 'application/json'
            },
            params: {id: 'id'} }
       })
}]);

这会给你:

  http://localhost:8080/reports/api/keys/b8a8a8e39a8f55da94fdbe6c 

没有问号

于 2014-06-03T07:43:54.113 回答
0

如果要删除模型,则无需添加参数(无论如何,参数都不适用于 DELETE):

$resource('/users/:id').delete({id: user.id}, function(res) {
  ...
})

或者

$resource('/users/:role/:id').delete({role: 'visitor', id: user.id});

我不确定这是否是 ngResource 的错误。

于 2016-01-29T20:27:17.857 回答