前言

在Angular框架中,创建团队为使用者进行了Ajax请求的封装,并通过$http服务暴露出相关的接口.Angular在其官方文档中指出, $http服务底层针对Web常见的安全攻击做出了相应的对策,也就是说使用$http服务封装的Ajax为使用者提供了更为安全的保障.作为一个框架,保证框架的可用性,适配性是很有必要的. Angular在设计,实现中也体现出来了这样的良好风格.我们通常在使用Ajax时,有时候希望我们能够在请求发起前或接收到请求后做一些相应的处理工作,比如:在请求发起前,在请求头中添加一下报文段.在请求返回时对一请求处理状态做一些管理,如统一处理404状态等等.Angular的$http服务在设计实现时充分考虑到了上述的情况.接下来,我们一起来学习和了解一下如何为$http服务添加拦截器,以及如何在我们自己实现的服务中实现类似的拦截器机制.
什么是拦截器–What are Interceptors?
Interceptor(拦截器)在服务端框架中属于一种比较常见的机制,如spring,Struts2等Java框架中拦截器属于基本配置项.拦截器提供了一种机制可以使开发者可以定义在一个action(动作)执行的前后执行的代码,这些代码可以是在一个action执行前阻止其执行的代码,也可以是修改目标动作某些行为的代码.(在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。在Spring框架中比较常见)
$http服务中的拦截器
查看API或是源码我们可以发现,Angular的实现中通过 httpProvider提供了一个名为interceptors的数组.这个数组接受拦截器服务注册,通过过程次的注册最终会形成拦截器链.这样每次在调用http服务的时候,angular都会通过我们定义的拦截点(切面)进行相应的Ajax动作修改.理论就不多说了,下面开始进入实战:
Angular中如何声明一个拦截器
// Interceptor declaration
module.factory('httpInterceptor', ['$log', function($log) {
$log.debug('$log is here to show you that this is a regular factory with injection');
return {
// do something
};
}]);
如何将声明的拦截器注册到$http服务中
// Add the interceptor to $httpProvider.interceptors
module.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]);
通过上面的简单两个步骤,我们基本就完成了http服务的拦截器编写与添加.但是上面的代码片段并不能实际使用,要想真正的实现拦截操作,我们还需要遵循http服务暴露出来的可以进行拦截的点进行相关的代码编写.
$httpProvider暴露了那些可以拦截的点?
对于上面暴露出来的接口使用也是异常的简单的,我们可以像声明一个简单的服务一样声明一个$http服务的拦截器,并交由angular的注入机制去使用我们配置的拦截器.
// 如同声明一个Angular服务一样声明一个拦截器
module.factory('sessionInjector', ['authService', function (authService){
return {
request: function (config){
if (!authService.isAnonymus) {
config.headers['x-session-token'] = authService.token;
}
return config;
}
};
}]);
// 然后将我们声明的拦截器添加到$httpProvider的拦截器链中,之后的服务注入Angular会负责帮我们完善
module.config(['$httpProvider', function ($httpProvider){
$httpProvider.interceptors.push('sessionInjector');
}]);
$http服务拦截器的异步支持
部分场景下,我们希望在拦截器中能够执行一些异步操作.然后依据不同的处理结果进行不同的拦截操作,AngularJS在设计的时候也很好的支持了这一特性.AngularJS允许我们在拦截的方法中,我们可以返回一个promise对象.如在http服务中,我们如果返回一个promise对象时,http服务将会延迟发起网络请求或是延迟响应请求结果.
module.factory('myInterceptor', ['$q', 'someAsyncService', function($q, someAsyncService) {
var requestInterceptor = {
request: function(config) {
var deferred = $q.defer();
someAsyncService.doAsyncOperation().then(function() {
// Asynchronous operation succeeded, modify config accordingly
...
deferred.resolve(config);
}, function() {
// Asynchronous operation failed, modify config accordingly
...
deferred.resolve(config);
});
return deferred.promise;
},
response: function(response) {
var deferred = $q.defer();
someAsyncService.doAsyncOperation().then(function() {
// Asynchronous operation succeeded, modify response accordingly
...
deferred.resolve(response);
}, function() {
// Asynchronous operation failed, modify response accordingly
...
deferred.resolve(response);
});
return deferred.promise;
}
};
return requestInterceptor;
}]);
上面的例子中,在请求发起时,如果对应的deferred被拒绝,http请求则会失败(如果进行抓包分析的话,你会发现http请求并没有发起).在请求进行响应时,如果deferred被拒绝,则请求也会失败.(抓包分析,网络请求是有返回的).
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# angularjs
# 拦截器
# http拦截器
# angular2
# 浅析AngularJs HTTP响应拦截器
# 快速学习AngularJs HTTP响应拦截器
# 详解Angular.js中$http拦截器的介绍及使用
# 我们可以
# 可以实现
# 被拒
# 会在
# 则会
# 这一
# 是在
# 也有
# 很好
# 也会
# 出了
# 是有
# 将会
# 说了
# 拒绝了
# 不多
# 很有
# 其他的
# 可用性
相关文章:
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何在西部数码注册域名并快速搭建网站?
营销式网站制作方案,销售哪个网站招聘效果最好?
香港服务器租用每月最低只需15元?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
制作网站怎么制作,*游戏网站怎么搭建?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站主机选购指南:核心配置与性价比推荐解析
建站主机核心功能解析:服务器选择与网站搭建流程指南
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
再谈Python中的字符串与字符编码(推荐)
制作网站的公司有哪些,做一个公司网站要多少钱?
如何选择香港主机高效搭建外贸独立站?
网站制作公司,橙子建站是合法的吗?
IOS倒计时设置UIButton标题title的抖动问题
h5网站制作工具有哪些,h5页面制作工具有哪些?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
建站之星会员如何解锁更多建站功能?
如何构建满足综合性能需求的优质建站方案?
如何在阿里云完成域名注册与建站?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
建站主机服务器选购指南:轻量应用与VPS配置解析
如何选择适配移动端的WAP自助建站平台?
如何确保西部建站助手FTP传输的安全性?
如何通过虚拟主机空间快速建站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
电商平台网站制作流程,电商网站如何制作?
如何在Tomcat中配置并部署网站项目?
,南京靠谱的征婚网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何在企业微信快速生成手机电脑官网?
长沙企业网站制作哪家好,长沙水业集团官方网站?
建站之星安装需要哪些步骤及注意事项?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何在橙子建站上传落地页?操作指南详解
香港服务器网站推广:SEO优化与外贸独立站搭建策略
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站之星如何保障用户数据免受黑客入侵?
北京网站制作的公司有哪些,北京白云观官方网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
建站之星在线客服如何快速接入解答?
存储型VPS适合搭建中小型网站吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。