axios創建實例作用是啥 可以不用嗎?
默認會導出實例axios,通常只需使用這個axios就可以了。
但是有時候你需要創建多個實例,比如你需要訪問多個服務地址,而這些服務請求和響應的結構都完全不同,那么你可以通過axios.create創建不同的實例來處理。
比如axios1是用http狀態碼確定響應是否正常,而axios2是服務器自己定義的狀態碼,又或者他們請求頭不同,支持的content-type不同,那么我可以單獨為axios1和axios2寫攔截器。
axios為什么創建實例?
原因是當我們axios模塊中導入對象時,使用的是默認的實例,當給這些實例設置默認配置時這些配置就被固定下來了,但后續開發中某些配置或許會不一樣,如timeout,content-Type、Authorization、token等,這時我們就可以創建新的實例,並傳入屬於該實例的配置信息:
axios實例的配置
## axios實例的配置
//常用的基本配置
axios.create({
baseURL:'http://localhost:8080', //請求的域名,基本地址
timeout:5000, //請求的超時時長,單位毫秒
url:'/data.json', //請求的路徑
method:'get,post,put,patch,delete' , //請求方法
headers:{
token:'' //比如token登錄鑒權,請求的時候攜帶token,讓后端識別登錄人的信息
}, //請求頭
params:{}, //請求參數拼接在URL上
data:{}, //請求參數放在請求體里
})
哪里可以配置axios呢?
- axios全局配置
## //axios.defaults.后邊跟的就是axios的那些配置
//一般修改的全局配置,也就下邊這兩個
axios.defaults.timeout = 1000
axios.defaults.baseURL = 'http://localhost:8080'
- axios實例配置
//如果create()里不添加參數的話,在創建這個axios實例的時候,使用的就是全局的配置
// 這個時候instance的timeout是1000
const instance = axios.create();
//如果設置了全局的配置,但是又想在創建的實例里修改配置怎么辦
instance.default.timeout = 3000
- axios請求配置
let instance = axios.create();
instance.get('/data.json',{
timeout:5000
})
具體的使用
在實際開發項目中,全局配置的局限性比較大,一般我們會全局配置兩個參數:
**axios.defaults.timeout**和**axios.defaults.baseURL**
假如我們有兩個請求接口,那么我們一般的做法是創建兩個axios實例
const instance1 = axios.create({
baseurl:'http://localhost:8080',
timeout:'1000'
})
const instance2 = axios.create({
baseurl:'http://localhost:9090',
timeout:'3000'
})
//instance1這里用到的參數有 baseurl,timeout,method,url
instance1.get('/userinfo').then(res=>{
console.log(res)
})
//instance2這里用到的參數有 baseurl,timeout,method,url,params,並且對timeout進行了修改
instance1.get('/orderlist',{
timeout:'5000'
params:{}
}).then(res=>{
console.log(res)
})
