为什么$ resource save()方法的成功回调没有在响应数据中传递?

时间:2016-05-19 16:59:08

标签: javascript angularjs http ngresource

我对ngResource的行为非常困惑,在调用 get 方法时,成功回调具有简单的响应数据:

svc.userApi().get({id:0})           
            .$promise.then(                                                     
                function(response) {                                            
                    console.log(response);                            
                });                                                     

此处response是后端返回的任何数据。但是,如果我使用保存/发布方法:

svc.authenticateApi().save({
                username: username,
                password: password
            })
            .$promise.then(
                function(val) {
                    console.log("user token:", val);
                });

回调中的val不是后期操作后端返回的数据,而是资源对象,具有$promise$resolved等属性:{{3} } 为了获得正确的数据,我必须在定义transformResponse时定义authenticateApi选项。 (有关详细信息,请参阅此enter image description here)。为什么ngResource以这种方式设计?

为了进行比较,使用$http时非常简单:

svc.login = function(username, password) {
            return $http.post(apiEndpoint + 'authenticate', {
                username: username,
                password: password
            })
            .then(function(val) {
                console.log("user token:", val.data);
            });
        };

成功回调中的val.data也是一个简单的响应数据:

question

我一直在使用保存/发布错误的方式吗?在我的用例中,如何在成功通过身份验证后获得身份验证令牌?

1 个答案:

答案 0 :(得分:0)

由于某种原因,看起来像是期待一个数组而不是字符串。

我建议为资源编写自己的方法

    var UserResource = $resource('/users/:id', {id: '@id'}, {
        'get': {
            cache: cache,
            isArray: true
        },
        'saveUserDefinition': {
            method: 'POST',
            interceptor: interceptor,
            isArray: false
        },
        'updateUserDefinition': {
            method: 'PUT',
            isArray: false
        }
    });

我在服务中返回资源的方法

    function getAllUsers(params) {
        if (!params) {
            params = {};
        }
        return UserResource.get(params).$promise;
    }