亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue axios 二次封裝的示例代碼

發布時間:2020-09-06 18:48:26 來源:腳本之家 閱讀:168 作者:Justnull 欄目:web開發

這段時間告訴項目需要,用到了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": "h6",}) 
 .then((res)=>{ 
  console.log(res) 
 },(error)=>{ 
  console.log(error)  
 }) 
 }, 
 methods: { 
 
 } 
} 
</script> 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

抚远县| 静安区| 达孜县| 张北县| 特克斯县| 女性| 安远县| 吕梁市| 垦利县| 盘锦市| 临桂县| 融水| 北宁市| 开封市| 六盘水市| 无锡市| 昌邑市| 九寨沟县| 库尔勒市| 郎溪县| 宿州市| 启东市| 黄浦区| 奇台县| 铜川市| 会理县| 崇仁县| 疏勒县| 景宁| 攀枝花市| 鄱阳县| 广宗县| 炎陵县| 微博| 商城县| 长治县| 凤翔县| 铜鼓县| 永德县| 睢宁县| 龙游县|