使用angular.js的补丁请求被发送到错误的URL

时间:2013-04-13 22:18:14

标签: angularjs

我的REST API配置为接受此类请求

public function lockUserAction($slug)
{} // "lock_user"     [PATCH] /users/{slug}/lock

所以发送补丁请求到

/api/users/2/lock

将使用id = 2锁定用户。这是我在angular.js

中的休息服务
angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id',
        {},
        { 
          list: { method: 'GET' },
          lock: { method: 'PATCH' }
        }
    );   
    return User;
});

列表工作只是finde,但锁不起作用。控制台打印:

PATCH /api/users 405 (Method Not Allowed) 

我像这样调用它

$scope.lock = function(user){
    user.$lock();
}

在错误消息中,我看到了网址/api/users,而不是/api/users/2/lock。这是正常的行为吗?当然,列表除了/api/users之外/api/users/{slug}/lock上仅允许GET请求和PATCH请求。

为什么/ api / users被调用而不是/ api / users / {slug} / lock的任何想法。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

当你调用$lock时,angular不知道你打算像以前一样调用相同的url,还有一些额外的path元素。此外,角度无法知道:id param的值是什么。

让角度知道锁定:

var User = $resource('/api/users/:id/:action', //add param to the url
        {}, 
        { 
          list: { method: 'GET' },
          lock: { method: 'PATCH',params:{action:"lock",id:"@id"}} //set param value, so angular knows where to send request, @id refers to user id in json representation of user
        }
    );