AngularJS:自定义 404 拦截器句柄 - 带有 URL 的响应
angularJS: custom 404 interceptor handle - response with url
在我的应用程序中,我使用拦截器来捕获所有http响应错误,例如:
var response = function(response) {
if(response.config.url.indexOf('?page=') > -1) {
skipException = true;
}
return response;
}
var responseError = function(rejection) {
if (rejection.status === 401 || rejection.status === 403) {
/**/
}
else if (rejection.status >= 500 || rejection.status === 0) {
/**/
}
else if (rejection.status === 404 && !skipException) {
/**/
}
else if (rejection.status === 404 && skipException) {
/**/
}
else{
/**/
}
return $q.reject(rejection);
};
当我转到我的控制器时(当我的 getArticles
方法返回一些数据时,而不是 404 - 当文章数组为空时),一切都很好:捕获了带有 skipException == true
的 404。
但是当我的文章数组为空时,服务器返回 404,当我进入这个控制器时,我无法获得response.config.url
- 没有捕获响应,但为什么? 我以为拦截器会捕获所有响应。
$timeout(function() {
$scope.getArticles();
}, 100);
$scope.getArticles
有这样的代码:
getDataService.getArticles($scope.pageNum).then(function(response) {
/**/
});
服务:
var getEventsByScrollService = function(num) {
var deferred = $q.defer();
$http.get(***, {
})
.success(function(response) {
deferred.resolve(response);
}).error(function(err, status) {
if (status === 404){
deferred.resolve([]);
}
else{
deferred.reject(err);
}
});
return deferred.promise;
};
如何根据 URL 有条件地捕获 404? 因为这个:
if(response.config.url.indexOf('?page=') > -1) {
并不总是有效。
为了
更好地维护和扩展到任何$http服务调用,可以这样做:
// Service call
$http.get({url:'/?page=', ignoreErrors: true})
// Interceptor
if(rejection.status === 404 && !rejection.config.ignoreErrors) {
}
您可以查看
Restangular,可能对您的目的有用。 它内置了良好的拦截器方法。 它是否真的对你有好处将取决于你是否使用RESTful API。https://github.com/mgonto/restangular
在"响应"中,您应该检查响应网址,而不是response.config.url。像这样:
var response = function(response) {
if(response.url.indexOf('?page=') > -1) {
skipException = true;
}
return response;
}
在响应级别,您没有config
所以...我已经做到了:
if(rejection.config.url.indexOf('?page=') > -1) {
skipException = true;
}
从文档中:
介于 200 和 299 之间的响应状态代码被视为成功 状态,并将导致调用成功回调。
由于服务器返回 404,因此调用 responseError
函数。不幸的是,config 参数不可用,因此您无法根据其中的请求 url 执行任何条件逻辑。
相关文章:
- 带有url的单页网站导航
- 获取带有URL的字符串的Javascript函数
- AngularJS:自定义 404 拦截器句柄 - 带有 URL 的响应
- Angular 2:HTTP Post Request,带有URL参数和正文类型参数
- PHP从带有url的变量中获取参数
- JavaScript正则表达式,带有URL激活以及微笑符号等
- 火狐插件不会打开带有url的新标签
- 如何正确创建带有“Url.Action”的查询字符串的网址,以便它在Firefox中工作
- 引导链接到带有 url 的选项卡
- 带有URL链接且无重复项的旋转横幅
- 不安全的 JavaScript 尝试启动带有 URL 的框架的导航更改 - 如何尝试捕获它
- Ember.js - 类似手风琴的 Master-Detail,带有 URL
- 打开一个带有URL的iframe,然后运行一些JS
- 在 JS 中随机生成带有 url 的自定义文本
- 带有url的简单javascript正则表达式
- 如何在Javascript和PHP中设置带有URL身份验证的API web密钥
- 如何通过带有url参数的Javascript在Facebook上共享
- 使用批处理发送带有url的信息
- 如何将带有url的文本作为参数安全地传递给CodeIgniter控制器
- 如何在“不安全的JavaScript试图访问带有url的框架”之前测试浏览器的权限(Chrome本地框架)