在項目中都須要與後臺進行數據交互,最經常使用的庫就是axios。
爲了更方便的在項目中的使用,那就本身動手開發一個基於項目的請求插件。
從接口配置、簡單調用、少許操做、Promise等需求點出發,最後寫出這個插件。
歡迎 點贊、收藏、評論、建議
歡迎 點贊、收藏、評論、建議
歡迎 點贊、收藏、評論、建議 (重要的事情說三遍)vue
npm install axios-vue-http
複製代碼
import Http from 'axios-vue-http'
Vue.use(Http);
複製代碼
地址:協議://域名.接口路徑[/url參數]github
大部分請求只須要同域名,因此域名默認不須要配置。
接口路徑以實際開發爲準
url參數分兩類:
一類是get請求,如/?a=1&b=2
一類是相似路由參數,如/delUser/11,中的11npm
傳入data爲Object類型,插件會根據Method自動放置
如 data = {a:1,b:2}, method: get時自動生成 url/?a=1&b=2axios
返回數據格式是JSON。api
import Http from 'axios-vue-http'
Vue.use(Http);
const apiList = [
{apiName: 'getTest', method: 'GET', url: 'api/test'},
{apiName: 'postTest', method: 'POST', url: 'api/test'},
{apiName: 'delTest', method: 'DELETE', url: 'api/test'},
{apiName: 'putTest', method: 'PUT', url: 'api/test'},
]
function success({res, resolve, reject}) {
// 接口請求成功處理 (status === 200)
// ...處理數據,
// example res.data = {code: 200, data: {list: [], page: 1}, msg: '獲取成功'}
let { data } = res;
if(data.code = 200){
resolve(data.data);
}
// example res.data = {code: -10001, msg: '獲取失敗'}
let { data } = res;
if(data.code < 0){
app.$message.error(data.msg);
reject(new Error(data.msg));
}
// 使用resolve(數據)向下傳遞
// 使用reject(err)向下傳遞
}
function fail({res, reject}) {
// 接口請求失敗處理(status !== 200)
// 使用reject(err)向下傳遞
}
function genHeader() {
let headers = {
token: localStorage.getItem('token') || undefined,
}
return { headers };
}
const app = new Vue({
beforeMount() {
this.$http.addApiList(apiList); //設置接口列表
this.$http.requestInterceptors(genHeader); //設置請求攔截器,添加headers token
this.$http.setSuccess(success); //設置請求成功回調
this.$http.setFail(fail); //設置請求失敗回調
},
render: h => h(App),
});
app.$mount('#app');
複製代碼
request(apiName, data, param);bash
參數 | 描述 |
---|---|
apiName | 接口請求名稱 |
data | 接口發送數據 post中使用data, get中會拼到url中 |
param | url參數,例:request('getTest',{a:1}, '/123') ===> xxx.xxx.xxx/api/test/12… |
// 在頁面中使用
methods: {
async getFetach(){
try {
const res = await this.$http.request('postTest', {p1: 1});
}catch(err) {
console.error('請求失敗:', err)
}
},
}
複製代碼