首頁  >  文章  >  web前端  >  在vue中如何實現axios二次封裝

在vue中如何實現axios二次封裝

亚连
亚连原創
2018-06-21 18:03:331845瀏覽

本篇主要介紹了vue axios 二次封裝的範例程式碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

這段時間告訴專案需要,用到了vue。

剛開始搭框架的時候用的是vue-resource後面看到官方推薦axios就換過來了順便封裝了一下

//引入axios
import axios from 'axios'

let cancel ,promiseArr = {}
const CancelToken = axios.CancelToken;
//请求拦截器
axios.interceptors.request.use(config => {
 //发起请求时,取消掉当前正在进行的相同请求
 if (promiseArr[config.url]) {
  promiseArr[config.url]('操作取消')
  promiseArr[config.url] = cancel
 } else {
  promiseArr[config.url] = cancel
 }
  return config
}, error => {
 return Promise.reject(error)
})

//响应拦截器
axios.interceptors.response.use(response => {
 return response
}, error => {
 return Promise.resolve(error.response)
})

axios.defaults.baseURL = '/api'
//设置默认请求头
axios.defaults.headers = {
 'X-Requested-With': 'XMLHttpRequest'
}
axios.defaults.timeout = 10000

export default {
 //get请求
 get (url,param) {
  return new Promise((resolve,reject) => {
  axios({
   method: 'get',
   url,
   params: param,
   cancelToken: new CancelToken(c => {
   cancel = c
   })
  }).then(res => {
   resolve(res)
  })
  })
 },
 //post请求
 post (url,param) {
  return new Promise((resolve,reject) => {
  axios({
   method: 'post',
   url,
   data: param,
   cancelToken: new CancelToken(c => {
   cancel = c
   })
  }).then(res => {
   resolve(res)
  })
  })
  }
 }

##說明

1、為防止發起請求時,目前正在進行的相同請求,在請求攔截器中加入了hash判斷,將相同請求url攔截

2、將axios中get,post公共配置抽離出來

axios.defaults.baseURL = '/api'
//设置默认请求头
axios.defaults.headers = {
 'X-Requested-With': 'XMLHttpRequest'
}
axios.defaults.timeout = 10000

3、get,post請求的封裝可能你會問,這裡的axios返回的就是promise對象,為什麼還要再次對get,post封裝一次promise.因為我這邊的話,在開發中使用async await會出現資料請求失敗的情況,而報的錯就是回傳的不是promise物件。 (ps:可async await返回的就是promise呀,這個問題後續再搞一下)就直接return了一個promise對象,以避免上面的錯誤。以下是請求介面的範例

import req from '../api/requestType'
/**
 * 拼团详情
 */
export const groupDetail = param => {
 return req.get('/RestHome/GroupDetail',param)
}

下面是資料的取得

async getData() {
 const params = {
  TopCataID: 0,
  pageNumber: this.pageNumber,
  pageSize: this.pageSize
 }
 const res = await groupList(params)
},

到這裡我們就簡單的封裝了一下適合自己專案的axios

封裝理由:

1、可以和後端商量好錯誤碼在這統一提示統一處理,省去不必要的麻煩

2、如果做接口全報文加解密都可以在此處理

介面統一歸類: 

const serviceModule = { 
 getLocation: { 
 url: ' service/location/transfor', 
 method: 'get' 
 } 
} 
const ApiSetting = {...serviceModule } 
 
export default ApiSetting

歸類好處:

#1、後期介面升級或介面名稱變更便於維護

http呼叫:

<script> 
import http from "../../lib/http.js"; 
import ApiSetting from "../../lib/ApiSetting.js"; 
export default { 
 created: function() { 
 http(ApiSetting.getLocation,{"srChannel": "h5",}) 
 .then((res)=>{ 
  console.log(res) 
 },(error)=>{ 
  console.log(error)  
 }) 
 }, 
 methods: { 
 
 } 
} 
</script>

上面是我整理給大家的,希望未來會對大家有幫助。

相關文章:

詳細解讀Angular5.1新功能

使用vue如何開發數獨遊戲

如何使用vuex實作選單管理

詳細解讀webpack3編譯相容IE8(詳細教學)

使用JS如何實現去除重複json

以上是在vue中如何實現axios二次封裝的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn