angular之interceptors拦截器
<!DOCTYPE html>
<html ng-app="nickApp">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>interceptors</title>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script>
/*
$http service在Angular中用于简化与后台的交互过程,其本质上使用XMLHttpRequest或JSONP进行与后台的数据交互。
在与后台的交互过程中,可能会对每条请求发送到Server之前进行预处理(如加入token),或者是在Server返回数据到达客户端还未被处理之前进行预处理(如将非JSON格式数据进行转换);
当然还有可能对在请求和响应过程过发生的问题进行捕获处理。所以Angular为我们提供了$http拦截器,用来实现上述需求。*/
/*
$httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。
1 首先 创建一个拦截器服务工厂
*/
angular.module('nickApp', [])
.factory('NickInterceptor', ['$q', function ($q) {
return {
// 可选,拦截成功的请求
/*
该方法会在$http发送请求到后台之前执行,因此你可以修改配置或做其他的操作。
该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者promise 。
如果返回无效的配置对象或者 promise 则会被拒绝,导致$http 调用失败
*/
request: function (config) {
// 进行预处理
// 例如加令牌
config.headers['Authorization'] = 'token666';
/*
Request Headers
token:token666 //加的令牌
*/
return config || $q.when(config);
}, // 可选,拦截成功的响应
/*
该方法会在$http接收到从后台过来的响应之后执行,因此你可以修改响应或做其他操作。
该方法接收响应对象(response object)作为参数,
然后必须返回响应对象或者promise。响应对象包括了请求配置(request configuration),头(headers),状态(status)和从后台过来的数据(data)。
如果返回无效的响应对象或者 promise 会被拒绝,导致$http调用失败。
*/
response: function (response) {
// 进行预处理
// 例如 JSON.parse(response)等
return response || $q.when(reponse);
}, // 可选,拦截失败的请求
/*
有时一个请求发送失败或者被拦截器拒绝了。requestError拦截器会捕获那些被上一个请求拦截器中断的请求。
它可以用来恢复请求或者有时可以用来撤销请求之前所做的配置,比如关闭遮罩层,显示进度条,激活按钮和输入框之类的。
*/
requestError: function (rejection) {
// 对失败的请求进行处理
// 例如 统一的弹窗提示 return $q.reject(rejection);
}, // 可选,拦截失败的响应
/*
有时候我们后台调用失败了。也有可能它被一个请求拦截器拒绝了,或者被上一个响应拦截器中断了。
在这种情况下,响应异常拦截器可以帮助我们恢复后台调用。
*/
responseError: function (rejection) {
// 对失败的响应进行处理
// 例如 统一的弹窗提示 return $q.reject(rejection);
}
};
}])
/*
$httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。
2 在config方法中,将拦截器加入到$httpProvider.interceptors数组中
*/
.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push('NickInterceptor');
}])
.controller('bodyCtl', ['$scope', '$http', function ($scope, $http) {
$scope.test1 = function () {
console.log(11);
$http.get('interceptors.html');
};
}]) </script>
</head>
<body ng-controller="bodyCtl">
<button class="btn" ng-click="test1()">click me</button>
<div ng-view></div>
</body>
</html>
angular之interceptors拦截器的更多相关文章
- angular http interceptors 拦截器使用分享
拦截器 在开始创建拦截器之前,一定要了解 $q和延期承诺api 出于全局错误处理,身份验证或请求的任何同步或异步预处理或响应的后处理目的,希望能够在将请求移交给服务器之前拦截请求,并在将请求移交给服务 ...
- (vue.js)axios interceptors 拦截器中添加headers 属性
(vue.js)axios interceptors 拦截器中添加headers 属性:http://www.codes51.com/itwd/4282111.html 问题: (vue.js)axi ...
- flume1.8 Interceptors拦截器(五)
1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ...
- springMVC之mvc:interceptors拦截器的用法
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- springMVC <mvc:interceptors>拦截器的使用
首先在springMVC.xml配置如下代码 <!-- 拦截器 --> <mvc:interceptors> <bean class="com.base.Acc ...
- Interceptors - 拦截器
1.概述 Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的. 拦截器需要实现org.apache.flume.interceptor.Intercep ...
- vue interceptors(拦截器)
拦截器 顾名思义: 就是半路个您劫持, 拦截器 其实在项目和自己写demo中,总会遇到请求方面需要在请求头里面做判断或者添加一些东西, 这时候 vue 中应用中axios的 interceptors ...
- (转)Angular中的拦截器Interceptor
什么是拦截器? 异步操作 例子 Session 注入(请求拦截器) 时间戳(请求和响应拦截器) 请求恢复 (请求异常拦截) Session 恢复 (响应异常拦截器) 转之:http://my.osch ...
- ionic2+Angular 使用HttpInterceptorService拦截器 统一处理数据请求
sstep1:新建http-Interceptor.ts文件 import { Injectable } from '@angular/core'; import { HttpInterceptorS ...
随机推荐
- django定时任务
1.celery流程图: Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成 2.使用 ...
- bzoj 3671 贪心
想到了从小到大依次填,但想到可能有重复元素,那是就会有分支,就不知怎样办了,最后才发现它是用随机数来调整排列,所以没有重复元素,唉..... /**************************** ...
- C#高级编程9-第8章 委托、lamdba表达式和事件
委托.lamdba表达式和事件 1.引用方法 函数指针是一个指向内存位置的指针,不是类型安全的.无法判断实际指向.参数和返回类型也无从知晓..NET委托是类型安全的.定义了返回类型和参数类型,不仅包含 ...
- linux_jdk_mysql_tomcat
1 linux下安装jdk的步骤: 0. 查找原有的jdk: rpm -qa | grep java 删除原有的jdk: rpm -e --nodeps java-1.7.0-openjdk-1.7. ...
- 解决MySQL建立连接问题,快速回收复用TCP的TIME_WAIT
最近同事遇到一个问题,使用python开发的工具在执行的时候无法和MySQL建立连接,其最直接的现象就是满篇的TIME_WAIT,最后通过调整tcp_timestamps参数问题得以解决,再次记录一下 ...
- BlueMind 3.0.17 发布,消息和协作平台
BlueMind 3.0.17 发布,此版本对即时消息 Web 应用连接处理做了较大改进(更可靠),还修复了通讯录浏览器. BlueMind 3.0.17 现已提供下载. 详细改进记录如下: Addr ...
- mysql的show status详解(转载)
SHOW STATUS提供服务器的状态信息(象mysqladmin extended-status一样).输出类似于下面的显示,尽管格式和数字可以有点不同: +-------------------- ...
- LNMP 1.2升级Nginx、MySQL/MariaDB、PHP教程
一般情况下不建议对生产环境进行升级,升级开始后会停止LNMP相关服务.本文仅适用于LNMP1.2及以后版本! 在LNMP目前LNMP v1.2中已经包含了Nginx.MySQL/MariaDB.PHP ...
- LINUX下的21个特殊符号 转
1. > 重定向输出符号. 2. >>重定向输出符号,但有追加的功能. 3. 2>错误重定向输出符号,覆盖原文件内容. 4. 2>>错误重定向输出符号, ...
- 想要快速上手 Spring Boot?看这些教程就足够了!| 码云周刊第 81 期
原文:https://blog.gitee.com/2018/08/19/weekly-81/ 想要快速上手 Spring Boot?看这些教程就足够了!| 码云周刊第 81 期 码云周刊 | 201 ...