JS中封裝axios來(lái)管控api的2種方式
前言:我們?cè)陂_發(fā)項(xiàng)目的時(shí)候,往往要處理大量的接口.并且在測(cè)試環(huán)境 開發(fā)環(huán)境 生產(chǎn)環(huán)境使用的接口baseurl都不一樣 這時(shí)候如果在開發(fā)環(huán)境完成之后切換每一個(gè)接口的baseurl會(huì)變的非常的麻煩,(要去每一個(gè)發(fā)出請(qǐng)求的頁(yè)面都要去修改地址)
所以為了更好的管控這些api,我們需要自己封裝一個(gè)axios定義統(tǒng)一的接口baseurl 這樣在環(huán)境的切換的時(shí)候更好的管控和修改.話不多說上代碼!!!
自己創(chuàng)建一個(gè)api文件夾 即可
import axios from 'axios'
為了處理java字符串問題
import qs from 'qs'
創(chuàng)建一個(gè)axios實(shí)例 在其中設(shè)置超時(shí)時(shí)間和響應(yīng)頭
const http = axios.create({
baseURL: process.env.VUE_APP_MOCK_DATA_URL, // api 的 base_url
timeout: 3000,
headers: {
'Content-Type': 'application/json;charset=utf-8'
}
})
/**
* 請(qǐng)求攔截 可以在發(fā)送請(qǐng)求的時(shí)候加上判斷信息
*/
http.interceptors.request.use(config => {
*****
return config
}, error => {
return Promise.reject(error)
})
/**
* 響應(yīng)攔截 可以對(duì)傳回的數(shù)據(jù)做出判斷
*/
http.interceptors.response.use(response => {
return response
}, error => {
return Promise.reject(error)
})
將這個(gè)封裝好的axios 暴露出去
export default http
在main.js中引入并且掛載到原型對(duì)象上
import http from '@/api/api.js' Vue.prototype.$http = http
第一種封裝的方式一般就是對(duì)于api數(shù)量不是特別多的時(shí)候 復(fù)雜層級(jí)不高的情況 這樣封裝完全可以
第二種方式
'use strict'
同樣的也需要引入這兩個(gè)包
import axios from 'axios'
import qs from 'qs'
// 設(shè)置攔截器 默認(rèn)請(qǐng)求url得前綴
// axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? '/custInfo' :
// '127.0.0.1:8888',
// axios.interceptors.request.use(config => {
// // // loading
// return config
// }, error => {
// return Promise.reject(error)
// })
//
// axios.interceptors.response.use(response => {
// return response
// }, error => {
// return Promise.resolve(error.response)
// })
export default {
post(url, data) {
return new Promise((resolve, reject) => {
axios({
method: 'post',
url,
// qs這個(gè)插件主要是為了解決java后臺(tái)接受到得參數(shù)必須是字符串
data: qs.stringify(data),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).then((res) => {
resolve(res)
}).catch((error) => {
reject(error)
})
})
},
get (url, params) {
return new Promise((resolve, reject) => {
axios({
method: 'get',
url,
params, // get 請(qǐng)求時(shí)帶的參數(shù)
}).then((res) => {
resolve(res)
}).catch((error) => {
reject(error)
})
})
}
}
這種封裝好之后,就可以在創(chuàng)建一個(gè)文件夾 然后把所有的接口都寫在一起
getCustValue(params) {
return $http.post('/custOverview/getCustValue', params);
},
getTacntrt(params) {
return $http.get('/dict/getTacntrtMgmtMsgMonth', params);
},
query(params) {
return $http.post('/indexManager/queryVipFlowCount', params);
}
然后一一列舉 就可以非常好的梳理api
總結(jié)
以上所述是小編給大家介紹的JS中封裝axios來(lái)管控api的2種方式,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
three.js著色器材質(zhì)的內(nèi)置變量示例詳解
這篇文章主要給大家介紹了關(guān)于three.js著色器材質(zhì)內(nèi)置變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用three.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
IOS中safari下的select下拉菜單文字過長(zhǎng)不換行的解決方法
今天在項(xiàng)目開發(fā)中遇到一個(gè)問題safari下的select下拉菜單文字過長(zhǎng)不換行問題,最終我用<optgroup>標(biāo)簽解決此問題,下面小編把實(shí)現(xiàn)思路分享給大家供大家參考2016-09-09
javascript同頁(yè)面多次調(diào)用彈出層具體實(shí)例代碼
一個(gè)在同一個(gè)頁(yè)面可多次調(diào)用的javascript彈出層效果,有需要的同學(xué)可以參考一下2013-08-08
doctype后如何獲得body.clientHeight的方法
doctype后如何獲得body.clientHeight的方法...2007-07-07
微信小程序?qū)崿F(xiàn)跳轉(zhuǎn)詳情頁(yè)面
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)跳轉(zhuǎn)詳情頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
Javascript讀取上傳文件內(nèi)容/類型/字節(jié)數(shù)
這篇文章主要為大家詳細(xì)介紹了Javascript讀取上傳文件內(nèi)容/類型/字節(jié)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
innerHTML 和 getElementsByName 在IE下面的bug 的解決
innerHTML 真的一個(gè)麻煩的東西。IE 和 firefox 對(duì)dom 處理的方式不是很一樣。IE 對(duì)動(dòng)態(tài)加載的很多dom 不支持動(dòng)態(tài)更新。2010-04-04
JS綁定事件監(jiān)聽的幾種實(shí)現(xiàn)方法匯總
在JavaScript中事件監(jiān)聽是一種用于處理用戶交互的機(jī)制,下面這篇文章主要給大家介紹了關(guān)于JS綁定事件監(jiān)聽的幾種實(shí)現(xiàn)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10

