【问题标题】:What's the parameter for ngResource save() method's callbackngResource save() 方法回调的参数是什么
【发布时间】:2016-09-16 13:20:31
【问题描述】:

我正在将我的 Angular 代码从使用 $http 重构为 ngResource。

我曾经在我的服务中有这样的代码:

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

打印的用户令牌将是一个 jwt 令牌。现在我尝试将代码重构为这样的:

   svc.login = function(username, password) {
        svc.authenticateApi().post(apiEndpoint + 'authenticate', {
                    username: username,
                    password: password
                },
                function(val) {
                    console.log("user token:", val);
                    svc.token = val;
                },
                function(res) {
                    console.log("error:", res.status + " " + res.statusText);
                });

        };

但是,它不起作用,因为传递给第一个回调的参数val 不再是令牌本身,而是一个包含如下字符串数组的对象:

处理从 post 方法返回的数据的标准方法是什么? (在这种情况下,帖子的定义与此资源上的save 相同)

【问题讨论】:

    标签: javascript angularjs ngresource


    【解决方案1】:

    我认为问题来自 transformRespose

    transformResponse – {函数(数据, headersGetter)|Array.} – 变换 函数或此类函数的数组。变换函数采用 http 响应正文和标头并返回其转换后的 (通常是反序列化的)版本。默认情况下,transformResponse 将 包含一个检查响应是否看起来像 JSON 的函数 字符串并使用 angular.fromJson 对其进行反序列化。为了防止这种情况 行为,将 transformResponse 设置为一个空数组: transformResponse: []

    尝试将您的响应转换为 json:

    transformResponse: function (data) {
            return { token: angular.fromJson(data) }
    

    【讨论】:

    • 我觉得不是这样,我已经transfromResponse到[]: 'post': { method: 'POST', transformResponse: [] },但是结果是一样的跨度>
    • 我更新了我的答案。当响应是字符串时,角度 js 会出现问题。尝试将其转换为 json,或更改后端发送的响应
    • 现在可以使用了,谢谢!但是你能解释一下为什么 ngResource 是这样设计的吗? get 方法的成功回调会传入数据本身,为什么post 的成功回调会传入看起来像 $resource 对象的东西?我在这里以错误的方式使用 post 方法吗?这使得 ngResource 的吸引力远低于 $http。
    • ngResource 是为 RESTful API 设计的,这就是它以这种方式工作的原因,它需要某种响应类型。我怀疑您的 api 不是 RESTful,但您的资源请求始终可以自定义以适合您的 api
    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2016-09-16
    • 1970-01-01
    相关资源
    最近更新 更多