基于 TypeScript重构Axios-基础功能(request数据体处理)

78 阅读3分钟

针对request数据体的处理分为了以下四种

  • 处理Url及相关参数
  • 处理Body数据
  • 处理Header数据

处理URL及相关参数

处理功能实现
实现目标: 实现一个工具函数,拼接params到url上
  • 保存url中已存在的参数
  • 丢弃url中的哈希标记
  • 空值处理
  • 特殊字符处理
  • 参数为数组、对象、Date类型处理
实现逻辑
  1. 创建工具函数buildURL,传入url及params两个参数
  2. 对params进行判空(如果为空直接返回url即可),如果params不为空,创建容器数组parts后
  3. 对params进行遍历,拿出params的value值组成一个数组value
  4. 对value进行遍历,将value数组中的每一项进行Date日期格式及对象格式判断,将每一项都进行处理后以固定格式push进parts中
  5. 使用&对parts的每一项进行拼接
  6. 对url进行判断,如果url中含哈希值,就截掉
  7. 判断现url存不存在参数,存在参数则使用&拼接处理后的值,反之就使用?对url和参数进行拼接
代码实现
  • 特殊字符处理辅助函数

code4.png

  • 类型判断辅助函数

code5.png

  • 工具函数buildURL

code6.png

处理Body数据

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

code7.png

  • 类型判断辅助函数不重复贴了

处理Header数据

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

code8.png

  • 类型判断辅助函数

code9.png

  • XHR函数

code10.png

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