javascript - 为什么 $resource save() 方法的成功回调没有传入响应数据?

标签 javascript angularjs http ngresource

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

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

这里的response 是后端返回的任何数据。但是,如果我使用 save/post 方法:

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

callback中的val不是post操作后后端返回的数据,而是一个资源对象,具有$promise$resolved等属性 等:enter image description here 为了获得正确的数据,我必须在定义 authenticateApi 时定义一个 transformResponse 选项。 (有关详细信息,请参阅此 question)。为什么 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);
            });
        };

success回调中的val.data又是一个普通的响应数据:

enter image description here

我是否以错误的方式使用保存/发布?在我的用例中,在成功通过身份验证后,您还能如何取回身份验证 token ?

最佳答案

出于某种原因,看起来 save 需要一个数组,而不是一个字符串。

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

    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;
    }

关于javascript - 为什么 $resource save() 方法的成功回调没有传入响应数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37329677/

相关文章:

相当于 python 字符串切片的 JavaScript

JavaScript Promises 和函数返回差异

Angularjs $state.go 在新标签页中打开链接

http - 在 Google App Engine 日志中查看 POST 请求的参数

java - 我的 java applet 如何使用我的 PHP 认证 session ?

ruby - 是否有比 Net::HTTP 更用户友好的替代方案来与 REST API 交互?

javascript - 如何将 html 值传递到 AngularJS 方法中?

javascript - 从查询sql数据库获取数据到javascript

javascript - Vue PWA 刷新后没有获取新内容

javascript - Angular 检测离开路线。