背景:
??axios不進行封裝也可以使用,但對于接口返回的狀態要在每個請求里寫一遍,代碼重復量大,不利于維護。
開始:
??首先建一個request.js
文件并在這個文件里引入axios
和qs
。
??用qs是為了將參數轉換成字符串傳給后端,因為axios默認有兩種傳參形式,一種是Format-Data,另一種是Request Payload,Request Payload形式如果前后端都不做處理,則后端拿不到請求參數。這個問題前端和后端都可以解決(前端詳見:Vue axios發post請求后臺接收不到參數的三種解決方案;據說后端接收參數時加上@RequestBody就可以,后端我不太懂,不做擴展了),只要有一方處理就好。
用之前當然要先安裝一下:
npm install axios --save-dev
npm install qs --save-dev
安裝完成后在request.js里引用
//request.js
import axios from "axios"
import qs from "qs"
接下來就可以創建axios實例了:
const request = axios.create({
baseURL: 'http://xxx.com', // api的base_url
timeout: 5000 // 請求超時時間
});
如果是vue-cli初始項目的話,baseURL的值可以是process.env.BASE_URL。
請求攔截處理:
request .interceptors.request.use(function(config){
//在請求發送之前做一些事
config.header['Authorization'] = '' + token // 讓每個請求攜帶token-- ['X-TokenAuthorization']為自定義key 請根據實際情況自行修改
//也可以給發請求時加一個loading的動畫
//當寫java接口的童鞋不用@RequestBody接收參數時,傳參就要靠自己了
config.method === 'POST' || 'PUT' || 'PATCH' ? config.data = qs.stringify({...config.data}) : config.params = {...config.params};
return config;
},function(error){
//當出現請求錯誤是做一些事
return Promise.reject(error);
});
最后就是把封裝好的axios拋出去:
export default request
簡單封裝就到這里了,更多配置參考axios文檔,下面來看下怎么用:
//api.js
import request from './request'
export const getData = data => {
return request ({
url: '/api/xxx',
method: 'post',
data
})
};