axios
是乙個輕量的http
客戶端。
基於xmlhttprequest
服務來執行http
請求,支援豐富的配置,支援promise
,支援瀏覽器端和node.js
端。自vue2.0
起,尤大宣布取消對vue-resource
的官方推薦,轉而推薦axios
。現在axios
已經成為大部分vue
開發者的首選
特性:安裝
npm install axios -s
匯入
import axios from
'axios'
傳送請求
axios(}
).then
(res =>
)
axios
的api
很友好,你完全可以很輕鬆地在專案中直接使用。
不過隨著專案規模增大,如果每發起一次http
請求,就要把這些比如設定超時時間、設定請求頭、根據專案環境判斷使用哪個請求位址、錯誤處理等等操作,都需要寫一遍。
這種重複勞動不僅浪費時間,而且讓**變得冗餘不堪,難以維護。為了提高我們的**質量,我們應該在專案中二次封裝一下axios
再使用。
舉個例子:
// 其他請求配置...})
.then
((data)
=>
,(err)
=>
if(err.response.status ===
403)
// 其他錯誤處理.....
console.
log(err);}
);如果每個頁面都傳送類似的請求,都要寫一堆的配置和錯誤資訊,顯得很繁瑣,這時候對axios
進行二次封裝,讓使用更加便利。
封裝的時候,需要和後端進行協調一些約定,比如請求頭、狀態碼、請求超過時間。。。
設定介面請求字首:根據開發、測試、生產環境的不同,字首需要加以區分。
請求頭:實現一些具體的業務,必須攜帶一些引數才可以請求。
狀態碼:根絕介面返回的status
,來執行不同的業務,需要和後端進行約定。
請求方法:根據get
、post
等方法進行乙個再次封裝,使用起來更加方便。
請求***:根據請求的請求頭設定,來決定哪些請求時可以訪問的。
響應***:這塊就是根據 後端`返回來的狀態碼判定執行不同業務。
利用node
環境變數作為判斷,用來區分開發環境和正式環境。
if
(process.env.
node_env
==='development'
)else
if(process.env.
node_env
==='production'
)
大部分情況下,請求頭都是固定的,只有少部分情況下,會需要一些特殊的請求頭,這裡將普適性的請求頭作為基礎配置。當需要特殊請求頭時,將特殊請求頭作為引數傳入,覆蓋基礎配置。
const service = axios.
create(,
post:},
})
先引入封裝好的方法,在要呼叫的介面重新封裝成乙個方法暴露出去。
// get 請求
// post請求
}],// 傳送的資料
data,
// url引數
()
在頁面中就可以直接呼叫
// .vue
import
from
'@/assets/js/api'
getorglist()
.then
(res =>
)
這樣可以把api
統一管理起來,以後維護修改只需要在api.js
檔案操作即可。
請求***可以在每個請求裡面加上 token,做了統一處理之後維護起來也很方便。
// 請求***
axios.interceptors.request.
use(
config =>
, error =>
)
響應***可以在接收到響應後先做一層操作,如根據狀態判斷登入狀態、授權。
// 響應***
axios.interceptors.response.
use(response =>
else
if(response.data.code ===
510)
else
}else
}, error =>
})
整體axios.js
中的**如下:
import axios from
'axios'
;import
from
"@/assets/js/config"
;import vue from
'vue'
;// 設定超時時間和介面字首
let instance = axios.
create()
;// toast.allowmultiple(); 請求***
instance.interceptors.request.
use(
(config)
=>
) config.headers[
"content-type"]=
;let sessionid = localstorage.
getitem
("sessionid");
if(sessionid)
config.headers[
"channel"]=
;
config.data =
json
.stringify
(config.data);}
return config;},
(err)
=>);
// 響應***
instance.interceptors.response.
use(
(res)
=>
,600);
}else
}return promise.
reject
(res);}
return res;},
(error)
=>
// vue.prototype.$message.error("請求出現錯誤!");
return promise.
reject
(error);}
);// url 也做了封裝,
const
post
=(requrl, data, config =
,authtoken)
=>
const
put=
(url, data, config =
)=>
const
get=
(url, params, config =
)=>)}
const
deletemethod
=(url, config =
)=>)}
// 將方法注入到 vue 原型中,再後續呼叫的時候只用寫 this.$reqpost('admin/list',)即可。
export
default
, $reqpost:
, $reqput:
, $reqdel:,}
)}}
vue專案中對axios的封裝
一 安裝npm install axios二 引入 一般我會在src目錄上建立乙個network資料夾 network資料夾中建立乙個config.js 用來封裝axios 和乙個api.js 用來統一管理介面 三 config.js 中配置axios 引入axios import axios fr...
vue專案中對axios的全域性封裝
專案中介面會很多,個人喜歡建立api檔案對請求統一管理 1.新建api資料夾,資料夾下建立 axios.js,login.js 2.axios.js import axios from axios import router from router 引入路由是為了做重定向,比如沒有登入過期定向到登入...
在vue專案中,對axios進行的封裝
由於專案需求,對axios進行了封裝。引入axios import axios from axios let cancel promisearr const canceltoken axios.canceltoken 請求 axios.interceptors.request.use config ...