Vue中Axios的封裝與接口管理詳解
一、 Axios 的封裝
在 Vue 項(xiàng)目中,和后臺(tái)進(jìn)行數(shù)據(jù)交互是頻繁且不可或缺的,剛開始沒(méi)進(jìn)行 Axios 封裝的時(shí)候,每次請(qǐng)求后臺(tái)數(shù)據(jù)都是寫的完整的路徑,特別長(zhǎng),尤其是基準(zhǔn)地址,每次都要復(fù)制一遍加在前面,冗余特別大。封裝完 Axios 后,調(diào)用接口就簡(jiǎn)短多了,如果后期出現(xiàn)基準(zhǔn)地址的改變,只需要在配置中更改一次即可。
安裝 Axios
npm install axios
引入
我們先在 src 文件夾下創(chuàng)建一個(gè) utils 文件,再在該文件夾下創(chuàng)一個(gè) requery.js 文件
requery.js
import axios from 'axios' axios.defaults.baseURL = "http://...." // 這里寫接口基準(zhǔn)地址 export default axios
接口管理
我們?cè)僭?src 文件夾下創(chuàng)建一個(gè) api 文件,里面存放接口
我們把一個(gè)模塊相關(guān)的接口封裝在一個(gè) .js 文件中,例如我現(xiàn)在創(chuàng)建一個(gè)信息管理模塊的接口管理文件,取名為 messageManege.js
① 首先要在該文件中引入我們的 requery.js 文件
import request from '@/utils/requery'
② 封裝方法為 post 的接口
//獲取所有驗(yàn)收數(shù)據(jù)
export const getAllCheck = () => request({
method:'post',
url:"manager/selectAllCheckInfo"
})
③ 封裝方法為 get 的接口
//獲取所有延期數(shù)據(jù)
export const getAllDelay = () => request({
url:"manager/selectAllPostponeInfo"
})
④ 封裝參數(shù)要拼接在鏈接后面的接口
//驗(yàn)收狀態(tài)處理
export const CheckHandle = (x1,x2) => {
return request({
method: 'post',
url:`manager/check?status=${x1}&&id=${x2}`
})
}
⑤ 封裝請(qǐng)求頭為 "Content-Type": "application/json" 的接口
export const UpdateStage = data => {
return request({
method: 'post',
url: 'stage/update',
headers: {
"Content-Type": "application/json",
},
data: data
})
}
注意這里要傳入的 data 要轉(zhuǎn)換成 json 格式
統(tǒng)一暴露接口
在 src/api 的下面新建 index.js 文件用來(lái)統(tǒng)一暴露所有接口
import {
getAllCheck,CheckHandle,getAllDelay,UpdateStage
} from './messageManage'
export const getAllCheckAPI = getAllCheck
export const CheckHandleAPI = CheckHandle
export const getAllDelayAPI = getAllDelay
export const UpdateStageAPI = UpdateStage
在組件中使用
① mounted() 中使用
async mounted() {
const res = await getAllCheckAPI();
console.log(res.data) // 打印返回的數(shù)據(jù)
},
② 在普通方法中的使用
async StartProcess(s, i) {
// 調(diào)用后端接口
return CheckHandleAPI(s, i).then((res) => {
if (res.status == 200) {
this.$message.success("狀態(tài)修改成功!");
} else {
this.$message.error("狀態(tài)修改失敗!");
}
});
},
這樣 axios 的封裝和使用就完成啦~
補(bǔ)充:封裝get方法和post方法
我們常用的ajax請(qǐng)求方法有g(shù)et、post、put等方法,相信小伙伴都不會(huì)陌生。axios對(duì)應(yīng)的也有很多類似的方法,不清楚的可以看下文檔。但是為了簡(jiǎn)化我們的代碼,我們還是要對(duì)其進(jìn)行一個(gè)簡(jiǎn)單的封裝。下面我們主要封裝兩個(gè)方法:get和post。
get方法:我們通過(guò)定義一個(gè)get函數(shù),get函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)表示我們要請(qǐng)求的url地址,第二個(gè)參數(shù)是我們要攜帶的請(qǐng)求參數(shù)。get函數(shù)返回一個(gè)promise對(duì)象,當(dāng)axios其請(qǐng)求成功時(shí)resolve服務(wù)器返回 值,請(qǐng)求失敗時(shí)reject錯(cuò)誤值。最后通過(guò)export拋出get函數(shù)。
/**
* get方法,對(duì)應(yīng)get請(qǐng)求
* @param {String} url [請(qǐng)求的url地址]
* @param {Object} params [請(qǐng)求時(shí)攜帶的參數(shù)]
*/
export function get(url, params){
return new Promise((resolve, reject) =>{
axios.get(url, {
params: params
}).then(res => {
resolve(res.data);
}).catch(err =>{
reject(err.data)
})
});}post方法:原理同get基本一樣,但是要注意的是,post方法必須要使用對(duì)提交從參數(shù)對(duì)象進(jìn)行序列化的操作,所以這里我們通過(guò)node的qs模塊來(lái)序列化我們的參數(shù)。這個(gè)很重要,如果沒(méi)有序列化操作,后臺(tái)是拿不到你提交的數(shù)據(jù)的。這就是文章開頭我們import QS from 'qs';的原因。如果不明白序列化是什么意思的,就百度一下吧,答案一大堆。
/**
* post方法,對(duì)應(yīng)post請(qǐng)求
* @param {String} url [請(qǐng)求的url地址]
* @param {Object} params [請(qǐng)求時(shí)攜帶的參數(shù)]
*/
export function post(url, params) {
return new Promise((resolve, reject) => {
axios.post(url, QS.stringify(params))
.then(res => {
resolve(res.data);
})
.catch(err =>{
reject(err.data)
})
});
}這里有個(gè)小細(xì)節(jié)說(shuō)下,axios.get()方法和axios.post()在提交數(shù)據(jù)時(shí)參數(shù)的書寫方式還是有區(qū)別的。區(qū)別就是,get的第二個(gè)參數(shù)是一個(gè){},然后這個(gè)對(duì)象的params屬性值是一個(gè)參數(shù)對(duì)象的。而post的第二個(gè)參數(shù)就是一個(gè)參數(shù)對(duì)象。兩者略微的區(qū)別要留意哦!
總結(jié)
到此這篇關(guān)于Vue中Axios的封裝與接口管理的文章就介紹到這了,更多相關(guān)Vue Axios封裝與接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue2 SSR渲染根據(jù)不同頁(yè)面修改 meta
本篇文章主要介紹了Vue2 SSR渲染根據(jù)不同頁(yè)面修改 meta,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue項(xiàng)目中掃碼支付的實(shí)現(xiàn)示例(附demo)
本文主要介紹了vue項(xiàng)目中掃碼支付的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
vue-photo-preview圖片預(yù)覽失效的問(wèn)題及解決
這篇文章主要介紹了vue-photo-preview圖片預(yù)覽失效的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
詳解Vue-Cli 異步加載數(shù)據(jù)的一些注意點(diǎn)
本篇文章主要介紹了詳解Vue-Cli 異步加載數(shù)據(jù)的一些注意點(diǎn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
詳解用vue-cli來(lái)搭建vue項(xiàng)目和webpack
本篇文章主要介紹了詳解用vue-cli來(lái)搭建vue項(xiàng)目和webpack,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
詳解vue2.0+axios+mock+axios-mock+adapter實(shí)現(xiàn)登陸
這篇文章主要介紹了詳解vue2.0+axios+mock+axios-mock+adapter實(shí)現(xiàn)登陸,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

