快速学习AngularJs HTTP响应拦截器

任何时候,如果我们想要为请求添加全局功能,例如身份认证、错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段。

angularJs通过拦截器提供了一个从全局层面进行处理的途径。

四种拦截

实现 request 方法拦截请求

rush:js;"> request: function(config) { // do something on request success return config || $q.when(config); }

方法会在 $http 发送请求后台之前执行,因此你可以修改配置或做其他的操作。该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者 promise 。如果返回无效的配置对象或者 promise 则会被拒绝,导致 $http 调用失败。

实现 requestError 方法拦截请求异常

rush:js;"> requestError: function(rejection) {   // do something on request error  return $q.reject(rejection); }

有时候一个请求发送失败或者被拦截器拒绝了,请求异常拦截器会俘获那些被上一个请求拦截器中断的请求。它可以用来恢复请求或者有时可以用来撤销请求之前所做的配置,比如说关闭进度条,激活按钮和输入框什么之类的。

实现 response 方法拦截响应

rush:js;"> response: function(response) {   // do something on response success return response || $q.when(response);}

方法会在 $http 接收到从后台过来的响应之后执行,因此你可以修改响应或做其他操作。该方法接收响应对象(response object)作为参数,然后必须返回响应对象或者 promise。响应对象包括了请求配置(request configuration),头(headers),状态(status)和从后台过来的数据(data)。如果返回无效的响应对象或者 promise 会被拒绝,导致$http 调用失败。

实现 responseError 方法拦截响应异常

rush:js;"> responseError: function(rejection) { // do something on response error  return $q.reject(rejection); }

有时候我们后台调用失败了,也有可能它被一个请求拦截器拒绝了或者被上一个响应拦截器中断了。在这种情况下,响应异常拦截器可以帮助我们恢复后台调用

拦截器核心

拦截服务工厂

rush:js;"> var app = angular.module("ajaxHttp",[]); app.factory("httpInterceptor",[ "$q","$rootScope",function($q,$rootScope) { return { request: function(config) { // do something on request success return config || $q.when(config); },   requestError: function(rejection) {      // do something on request error      return $q.reject(rejection)    },response: function(response) { // do something on response success return response || $q.when(response); },responseError : function(rejection) { // do something on response error return $q.reject(rejection); } }; }]);

注册拦截工厂方法

rush:js;"> app.config(["$httpProvider",function($httpProvider) {   $httpProvider.interceptors.push("httpInterceptor"); }]);

示例

对401,404的拦截处理

rush:js;"> app.config(["$httpProvider",function($httpProvider) { $httpProvider.interceptors.push('httpInterceptor'); }]); app.factory("httpInterceptor",["$q","$injector",$injector) { return { "responseError": function(response) { if (response.status == 401) { var rootScope = $injector.get('$rootScope'); var state = $injector.get('$rootScope').$state.current.name; rootScope.stateBeforLogin = state; rootScope.$state.go("login"); return $q.reject(response); } else if (response.status === 404) { console.log("404!"); return $q.reject(response); } } }; ]);

以上内容给大家分享快速学习AngularJs HTTP响应拦截器 的相关知识,希望大家喜欢,同时感谢大家一直以来对编程之家网站的支持

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...