使用Typescript重构axios(七)——实现基础功能:处理响应header
0. 系列文章
1.使用Typescript重构axios(一)——写在最前面
2.使用Typescript重构axios(二)——项目起手,跑通流程
3.使用Typescript重构axios(三)——实现基础功能:处理get请求url参数
4.使用Typescript重构axios(四)——实现基础功能:处理post请求参数
5.使用Typescript重构axios(五)——实现基础功能:处理请求的header
6.使用Typescript重构axios(六)——实现基础功能:获取响应数据
7.使用Typescript重构axios(七)——实现基础功能:处理响应header
8.使用Typescript重构axios(八)——实现基础功能:处理响应data
9.使用Typescript重构axios(九)——异常处理:基础版
10.使用Typescript重构axios(十)——异常处理:增强版
11.使用Typescript重构axios(十一)——接口扩展
12.使用Typescript重构axios(十二)——增加参数
13.使用Typescript重构axios(十三)——让响应数据支持泛型
14.使用Typescript重构axios(十四)——实现拦截器
15.使用Typescript重构axios(十五)——默认配置
16.使用Typescript重构axios(十六)——请求和响应数据配置化
17.使用Typescript重构axios(十七)——增加axios.create
18.使用Typescript重构axios(十八)——请求取消功能:总体思路
19.使用Typescript重构axios(十九)——请求取消功能:实现第二种使用方式
20.使用Typescript重构axios(二十)——请求取消功能:实现第一种使用方式
21.使用Typescript重构axios(二十一)——请求取消功能:添加axios.isCancel接口
22.使用Typescript重构axios(二十二)——请求取消功能:收尾
23.使用Typescript重构axios(二十三)——添加withCredentials属性
24.使用Typescript重构axios(二十四)——防御XSRF攻击
25.使用Typescript重构axios(二十五)——文件上传下载进度监控
26.使用Typescript重构axios(二十六)——添加HTTP授权auth属性
27.使用Typescript重构axios(二十七)——添加请求状态码合法性校验
28.使用Typescript重构axios(二十八)——自定义序列化请求参数
29.使用Typescript重构axios(二十九)——添加baseURL
30.使用Typescript重构axios(三十)——添加axios.getUri方法
31.使用Typescript重构axios(三十一)——添加axios.all和axios.spread方法
32.使用Typescript重构axios(三十二)——写在最后面(总结)
1. 前言
上篇文章中,我们通过 XMLHttpRequest
对象的 getAllResponseHeaders
方法获取了响应header
,但是我们从demo
打印出来的结果中看到,headers
变成了一个字符串:
headers: "date: Mon, 29 Jul 2019 07:47:16 GMT ↵etag: W/"d-Ssxx4FRxEutDLwo2+xkkxKc4y0k" ↵connection: close ↵x-powered-by: Express ↵content-length: 13 ↵content-type: application/json; charset=utf-8 ↵"
字符串的每一行都是以回车符和换行符 \r\n
结束。这不是我们想要的结果,我们想要的是以一个对象的形式:
{
headers: "date: Mon, 29 Jul 2019 07:47:16 GMT
etag: 'W/"d-Ssxx4FRxEutDLwo2+xkkxKc4y0k"'
connection: 'close'
x-powered-by: 'Express'
content-length: '13'
content-type: 'application/json; charset=utf-8'
}
所以,接下来我们就要将字符串处理成对象形式。
2. 实现parseHeaders 函数
根据需求分析,我们要实现一个 parseHeaders
工具函数。我们在src/helpers/headers.ts
中实现该函数:
export function parseHeaders(headers: string): any {
let res = Object.create(null);
if (!headers) {
return res;
}
headers.split("\r\n").forEach(line => {
let [key, val] = line.split(":");
key = key.trim().toLowerCase();
if (!key) {
return;
}
if (val) {
val = val.trim();
}
res[key] = val;
});
return res;
}
- 首先,我们创建一个空对象
res
,用来存放最后的结果; - 其次,判断传入的
headers
是否为空,如果为空,则直接返回空对象res
; - 接着,如果
headers
不为空,则通过分隔符\r\n
将其按行分割开; - 再把每一行通过
:
分割成key
和value
; - 最后将
key
和value
添加到res
中;
3. 利用parseHeaders 函数处理响应header
函数实现好之后,我们就可以用它来处理返回的响应header
了,在src/xhr.ts
中:
import { parseHeaders } from "./helpers/header";
// 获取响应header
const responseHeaders = parseHeaders(request.getAllResponseHeaders());
OK,处理好之后我们再次运行上篇文章中的demo
,观察返回的响应header
。
4. 查看结果
运行demo
后,我们从控制台的打印信息中看到headers
已经成功转化成对象形式了。
OK,上篇文章中遗留的第一个问题已经解决了,下篇文章我们继续解决第二个问题。
(完)
原文地址:https://www.cnblogs.com/wangjiachen666/p/11264442.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 听说你一读Spring源码就懵?我帮你把架子搭好了,你填就行!
- 机器学习感兴趣么?无监督的遥感图像分类感兴趣吗?来嘛!
- 仓库ERP管理系统(springboot)
- R海拾遗-shiny4
- Spring中眼见为虚的 @Configuration 配置类
- 微信6.6.7版本后图文分享无标题的分析
- GEO 数据挖掘-数据获得
- POI和EasyExcel-你还在为导入导出数据苦恼吗?
- geo数据挖掘-2
- 基于ssm的客户管理系统
- 牛逼哄哄的Spring是怎么被MyBatis给征服了?
- Flutter如何和Native通信-Android视角
- 面试问倒无数人的Spring事务问题,就被你这样说完了?
- GEO数据挖掘3
- 史上最全Docker初学者命令大全