gpt4 book ai didi

angularjs - 带有 $http transformResponse 的 angular-http-auth

转载 作者:行者123 更新时间:2023-12-05 01:02:56 24 4
gpt4 key购买 nike

我正在使用 angular-http-auth每当从服务器返回 401“未经授权”响应时显示登录对话框。

因为我很酷,所以我也尝试反序列化我的服务中的响应对象。例如,如果服务请求 car响应是 {make: Honda, model: Civic} ,我尝试将其反序列化为 Car对象使用 transformResponse .

例如:

getCar: function() {
return $http.get('/api/car', {
method: 'GET',
transformResponse: function(data, headers) {
var c = angular.fromJson(data);
return new Car(c);
}
});
}

这不适用于 angular-http-auth .如果响应是 401 Unauthorized,您将收到 javascript 错误。这是因为 angular 会尝试运行 transformResponse代码,即使响应是 401。

原来 $http拦截器(这是 angular-http-auth 使用的)在 transformResponse 之后运行代码。这是一个大问题,因为在 transformResponse 中没有任何代码如果服务器响应是 401(不会有任何 data )

这是其他人的问题吗?你是怎么解决的?我是不是不用 transformResponse如果我使用 $http拦截器?

最佳答案

我知道聚会迟到了,但是对于像我一样从 Google 来到这里的任何人(我也将此作为评论发布到 related issue 提交给 Angular 存储库):

我还发现在 transformResponse 之后运行响应拦截器令人困惑。方法。我给 $http.defaults.transformResponse 添加了一个方法. Here是文档中有关如何执行此操作的示例。

所以,如果你基本上需要一个在 transformResponse 之前运行的响应拦截器方法,这应该这样做:

'use strict';

angular.module('app')
.run(function ($http) {
$http.defaults.transformResponse.push(function (data, headers) {
// do stuff here before the response transformation

// Be sure to return `data` so that the next function in the queue can use it.
// Your services won't load otherwise!
return data;
});
});

如果您的服务或 http 调用没有自己的响应转换器,那么您现在很好。

如果您的服务确实有自己的 transformResponse方法,它们实际上会覆盖所有默认转换器(我在阅读了很长时间的文档后发现了这一点),并且上面的代码将不会运行。

为了规避这种情况,您可以关注 this example在文档中。

关于angularjs - 带有 $http transformResponse 的 angular-http-auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com