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.前言
俗話說:檢驗學習成果最直接的方式就是造論子。本系列文章是博主在學習了TypeScript
之后,為了檢驗自己的學習成果,萌生出造一個輪子試試的想法。由於是第一次造輪子,所以想選擇一個常用,易於理解,並且自己較熟悉的輪子。網上搜索一番,發現前后端交互神器axios
造的人挺多的,並且提供了很多重構思路,為了能夠站在巨人的肩膀上,並且axios
也剛好符合上面提到的三個要求,那就是它啦,使用TypeScript
重構axios
。
2.需求分析
axios,基於Promise的HTTP客戶端,用於瀏覽器和node.js
重構之前,我們需要簡單地做一些需求分析,看一下我們這次重構需要支持哪些 Features
。官方支持的Features
如下:
- Make XMLHttpRequests from the browser(在瀏覽器端使用 XMLHttpRequest 對象通訊)
Make http requests from node.js(在 Node.js 端使用 http request 通訊)- Supports the Promise API(支持 Promise API)
- Intercept request and response(支持請求和響應的攔截器)
- Transform request and response data(支持請求數據和響應數據的轉換)
- Cancel requests(支持請求的取消)
- Automatic transforms for JSON data(JSON 數據的自動轉換)
- Client side support for protecting against XSRF(客戶端防止 XSRF)
這次重構,我們只實現官方支持的8個Features
中的7個,其中axios
在node
中的應用不打算實現,因為這部分在日常使用中相對較少(其實是因為懶,逃~)。
3.了解axios
axios
本質上就是發送一個請求拿到響應結果中途可以去對配置參數、請求數據和響應數據處理同時也支持一些攔截器的調用,它的工作流程如下:
而我們后續的重構思路也是嚴格按照這樣一個工作流程展開。
3.目錄介紹
本項目分為客戶端(examples
文件夾)和服務端(server
文件夾):客戶端主要是用來檢驗重構功能的demo
,采用TypeScript
按照模塊化進行編寫;服務端是用來響應demo
中發出的請求,采用express
編寫。
├─.gitignore
├─index.html
├─package.json
├─README.md
├─tsconfig.json // TypeScript 編譯配置文件
├─tslint.json // TypeScript lint 文件
├─examples // 每個功能點的demo
├─server // 服務端源碼
└─src // 源碼目錄
├─axios.ts
├─defaultes.ts
├─cancel
├─core
├─helpers
└─types
4.項目運行
# 克隆項目到本地
git clone https://github.com/NLRX-WJC/ts-axios.git
# 進入項目目錄
cd ts-axios
# 安裝依賴
npm install
# 同時打開客戶端和服務端
npm run server | npm start
OK,介紹完了,現在就讓我們開始使用TypeScript
重構axios
吧!!!