基于 TypeScript重构Axios-基础功能(request数据体处理)
针对request数据体的处理分为了以下四种
- 处理Url及相关参数
- 处理Body数据
- 处理Header数据
处理URL及相关参数
处理功能实现
实现目标: 实现一个工具函数,拼接params到url上
- 保存url中已存在的参数
- 丢弃url中的哈希标记
- 空值处理
- 特殊字符处理
- 参数为数组、对象、Date类型处理
实现逻辑
- 创建工具函数buildURL,传入url及params两个参数
- 对params进行判空(如果为空直接返回url即可),如果params不为空,创建容器数组parts后
- 对params进行遍历,拿出params的value值组成一个数组value
- 对value进行遍历,将value数组中的每一项进行Date日期格式及对象格式判断,将每一项都进行处理后以固定格式push进parts中
- 使用&对parts的每一项进行拼接
- 对url进行判断,如果url中含哈希值,就截掉
- 判断现url存不存在参数,存在参数则使用&拼接处理后的值,反之就使用?对url和参数进行拼接
代码实现



处理Body数据
处理功能实现
实现目标: 实现一个工具函数transformRequest,将请求body中的数据体格式转成XMLHttpRequest要求的数据类型
- 根据XMLHttpRequest MDN文档中提示到,在XHR请求要发送得数据体中,可以是以下几种数据类型Document、Blob、BufferSource、FormData、URLSearchParams、USVString,但是在平常请求中,绝大多数据请求数据体其实是一个对象,故在这里做个逻辑判断,将对象转换成json字符串,使其成为USVString类型中的一员,就可以了
代码实现

处理Header数据
处理功能实现
实现目标: 实现一个工具函数processHeaders,将请求body中的数据体格式转成XMLHttpRequest要求的数据类型(这块目前只针对'content-type',但是其他字段实现逻辑也是大同小异)
- 定义函数processHeaders并传入headers和data数据项,实现数据规范化辅助函数normalizeHeaderName(实现这个函数的原因是因为在项目实践中,content-type这个字段其实对大小写并不敏感,所以在这里要统一转换)
- 转换后对data进行判空,如果为空,不做任何处理,反之则执行normalizeHeaderName,完成后统一headers['Content-Type']格式,return出headers
- 在XHR文件中导入进行data判空,非空后循环遍历,循环setRequestHeader进最终发送的headers中,完成request最终的处理
代码实现



至此针对request数据体处理的工作全部结束,下一步就是对响应数据进行处理