【问题标题】:ngResource does not pass parameters - how to debug?ngResource 不传递参数 - 如何调试?
【发布时间】:2016-04-07 07:26:48
【问题描述】:

我有以下资源定义:

myservices.factory('User', ['$resource',
    function($resource){
        return $resource('/user/:screenName', {}, {
            whoami: {
                url: '/user',
                method: 'GET',
                isArray: false,
                params: {
                    op: 'whoami'
                }
            },
            query: {
                url: '/user',
                method: 'GET',
                isArray: true
            },
            get: {
                method: 'GET',
                isArray: false
            },
            update: {
                method:'GET',
                params: {
                    op: 'update'
                },
                isArray: false,
            },
            delete: {
                method:'GET',
                params: {
                    op: 'delete'
                },
                isArray: false,
            }

        });
    }]);

我认为它会将screenName 作为 URL 的一部分传递。不幸的是,这不会发生。

控制器代码如下:

            var user = new User();
            user.firstname = $scope.selectedUser.firstName;
            user.lastname = $scope.selectedUser.lastName;
            user.screenName = $scope.selectedUser.screenName;
            user.password1 = $scope.selectedUser.password1;
            user.password2 = $scope.selectedUser.password2;
            user.roles = $scope.selectedUser.roles;
            user.maximalCalories = $scope.selectedUser.maximalCalories;

            user.$update();

其实它通过了:

GET http://localhost:8080/user?op=update HTTP/1.1
Host: localhost:8080
...
Accept: application/json, text/plain, */*
...
Referer: http://localhost:8080/app/index.html

即除了显式参数,它不传递任何参数。

UDPATE

如果我这样做

    User.$update(
                {
                    firstname : $scope.selectedUser.firstName,
                    lastname : $scope.selectedUser.lastName,
                    screenName : $scope.selectedUser.screenName,
                    password1 : $scope.selectedUser.password1,
                    password2 : $scope.selectedUser.password2,
                    roles : $scope.selectedUser.roles,
                    maximalCalories : $scope.selectedUser.maximalCalories,
                }
            );

我得到一个异常TypeError: User.$update is not a function

更新 2

显然,Angular 将函数 $update 添加到对象并将函数 update 添加到类,如果我在 LHS 有对象,它将仅通过 POST...

【问题讨论】:

  • 你能看看开发者控制台网络标签吗..看看请求正文..它必须在正文中传递对象..
  • 当然,因为您没有将screenName 传递给资源调用。
  • @dfsq 不应该从对象user 中获取它吗?
  • @PankajParkar 它没有。我在fiddler中看到request,没有body,是GET请求。

标签: javascript angularjs rest angular-resource


【解决方案1】:

您没有将screenName 传递给资源。应该是:

user.$update({screenName: $scope.selectedUser.screenName});

【讨论】:

    【解决方案2】:

    问题是你的$resourceudpate对象的请求类型错误,它应该有方法PUT而不是GET

    update: {
        method: 'PUT', //<--change it 'PUT' from 'GET'
        params: {
            op: 'update'
        },
        isArray: false,
    },
    

    另外你的删除方法类型错误,它应该有method: 'DELETE'而不是method: 'GET'

    【讨论】:

    • 是的,我知道我可以重新设计服务器端,但如果我不能呢?
    • @Dims 我不是在谈论服务器端..我只是说要更改 $resource 对象..
    • @Dims 你能试试我的建议吗?
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2014-09-17
    • 2010-10-12
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多