vue如何封裝Axios的get、post請(qǐng)求
封裝Axios的get、post請(qǐng)求
Axios在vue項(xiàng)目中用的較多,每次都要寫(xiě)一遍很是不方便,尤其其中的config配置項(xiàng)是公用的,完全可以封裝一下,這樣下次再用就可以直接CV了!畢竟CV大法香?。?/p>
1.封裝Axios基礎(chǔ)配置
創(chuàng)建一個(gè)request.js 文件,內(nèi)容如下,我把解釋性文字放在注釋里了。
import axios from 'axios' export function request(config) { // 1.創(chuàng)建axios的實(shí)例 const instance = axios.create({ // 設(shè)置基礎(chǔ)的url配置項(xiàng),這樣接口處的url前面就不用寫(xiě)url:'http://127.0.0.1:8000/api/home',直接寫(xiě)成 url:'/api/home', 就可以了 baseURL: 'http://127.0.0.1:8000/', //設(shè)置請(qǐng)求超時(shí)時(shí)間 timeout: 5000 }) // 2.axios的攔截器,用不到的可以忽略這節(jié) // 2.1.請(qǐng)求攔截的作用 instance.interceptors.request.use(config => { return config }, err => { console.log('請(qǐng)求攔截err: '+err); }) // 2.2.響應(yīng)攔截 instance.interceptors.response.use(res => { return res.data }, err => { console.log('響應(yīng)攔截err: '+err); }) // 3.發(fā)送真正的網(wǎng)絡(luò)請(qǐng)求 return instance(config) }
2.封裝網(wǎng)絡(luò)請(qǐng)求
我們可以將相關(guān)的網(wǎng)絡(luò)請(qǐng)求都放在一個(gè)js中,這樣再使用和修改的時(shí)候就方便查找了。其中g(shù)et請(qǐng)求比較簡(jiǎn)單,post 的請(qǐng)求根據(jù)傳對(duì)象輸類型不同,要做不同設(shè)置。
現(xiàn)在來(lái)說(shuō)說(shuō)post請(qǐng)求常見(jiàn)的數(shù)據(jù)格式(content-type)
Content-Type: application/json : 請(qǐng)求體中的數(shù)據(jù)會(huì)以json字符串的形式發(fā)送到后端,這種是axios默認(rèn)的請(qǐng)求數(shù)據(jù)類型,我們只需將參數(shù)序列化json字符串進(jìn)行傳遞即可,無(wú)需多余的配置。
Content-Type: application/x-www-form-urlencoded:請(qǐng)求體中的數(shù)據(jù)會(huì)以普通表單形式(鍵值對(duì))發(fā)送到后端
Content-Type: multipart/form-data: 它會(huì)將請(qǐng)求體的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開(kāi)。既可以上傳鍵值對(duì),也可以上傳文件。
創(chuàng)建一個(gè)network.js 文件,內(nèi)容如下:
// 導(dǎo)入封裝好的Axios import {request} from './request' //注意request.js的相對(duì)路徑問(wèn)題 //1. get請(qǐng)求---獲取首頁(yè)的多個(gè)數(shù)據(jù) export function getHomeMultidata() { return request({ url:'/api/home', method:'get', // 可以帶參數(shù)也可以不帶參數(shù) // params: { // userName: 'Lan', // password: '123' // } }) } // 2.1 post請(qǐng)求---傳輸json數(shù)據(jù)時(shí),獲取電視劇多個(gè)數(shù)據(jù) export function getTvshowMultidata() { return request({ url:'/api/Tvshow', headers: { 'Content-Type': 'application/json' }, method:'post', data: { userName: 'Lan', password: '123' } }) } //2.2 post請(qǐng)求---傳輸文件流,表單Form Data 數(shù)據(jù)時(shí) export function getMovieMultidata() { return request({ url:'/api/Movie', headers: { 'Content-Type': 'multipart/form-data'; }, method:'post', data: { userName: 'Lan', password: '123' } }) }
3.vue中使用
在script 標(biāo)簽中按需導(dǎo)入network.js 中需要使用的方法
import {getHomeMultidata} from "network/home/network"; //導(dǎo)入js,路徑自己根據(jù)文件位置設(shè)置
在方法中按照promise的格式調(diào)用函數(shù)即可
created() { // 在方法中調(diào)用函數(shù)即可 getHomeMultidata().then( res => { // 此處res 為返回的數(shù)據(jù),將返回的數(shù)據(jù)進(jìn)行處理顯示 this.banners = res.homedata.slice(0,5) this.newestData = res.homedata.slice(5,12) ).catch( err => { console.log(err) } ); },
network中的其他網(wǎng)絡(luò)請(qǐng)求方法使用方法同上。
vue axios兩種方法(封裝和不封裝)get請(qǐng)求和post請(qǐng)求
沒(méi)有封裝的用法
1.首先在項(xiàng)目中下載axios
npm install axios -s //此方法會(huì)將axios下載到package.json中的"dependencies"模塊中,大家可以自行查看
2.因?yàn)闆](méi)有封裝所以需要在單個(gè)vue組件中的編寫(xiě)js的地方進(jìn)行引用axios;語(yǔ)法如下
<script> import axios from ?' axios' </script>
3.然后在生命周期函數(shù)中進(jìn)行調(diào)用數(shù)據(jù)
export default{? created() { ? ? ? ? //get請(qǐng)求 ? ? ? ? axios.get("url", { ? ? ? ? params: { //此處為get請(qǐng)求傳遞的參數(shù) 但是一把get請(qǐng)求是沒(méi)有參數(shù)的 params是固定的 ? ? ? ? ? password: "123456", ? ? ? ? ?userName: "320621200305185129", ? ? ? ? }, ? ? ? }) ? ? ?? ? ? ? ?.then(function (response) { ? ? ? ?console.log(response, 666666); ? ? ?}) ? ? ?.catch(function (error) { ? ? ? ? console.log(error, 44444); ? ? ? }); ? ? ?? ? }, } ? //post請(qǐng)求 axios.post('url', { //此處是參數(shù) ? ? firstName: 'Fred', ? ? lastName: 'Flintstone' ? }) ? .then(function (response) { ? ? console.log(response); ? }) ? .catch(function (error) { ? ? console.log(error); ? });
每個(gè)項(xiàng)目的的接口都是不一樣的,很多時(shí)候代碼都不是唯一性的,要靈活的運(yùn)用
封中之后的用法
首先一個(gè)目錄utils,在該目錄下創(chuàng)建request.js 在里面編寫(xiě)
import axios from 'axios' export function request(config) { ? // 1.創(chuàng)建axios的實(shí)例 ? const instance = axios.create({ ? ? // 設(shè)置基礎(chǔ)的url配置項(xiàng),這樣接口處的url前面就不用寫(xiě)了 ? ? ? baseURL: 'http://192.168.0.112:9518/', 基礎(chǔ)代碼 ? ? //設(shè)置請(qǐng)求超時(shí)時(shí)間 ? ? timeout: 5000? ? }) ? ? // 2.axios的攔截器,用不到的可以忽略這節(jié) ? // 2.1.請(qǐng)求攔截的作用 ? instance.interceptors.request.use(config => { ? ? return config ? }, err => { ? ? console.log('請(qǐng)求攔截err: '+err); ? }) ? ? // 2.2.響應(yīng)攔截 ? instance.interceptors.response.use(res => { ? ? return res.data ? }, err => { ? ? ? ? console.log('響應(yīng)攔截err: '+err); ? }) ? ? // 3.發(fā)送真正的網(wǎng)絡(luò)請(qǐng)求 ? return instance(config) }
然后在目錄下創(chuàng)建api在此處創(chuàng)建index.js 在此處引用上方創(chuàng)建axios實(shí)例
import {request} from '../utils/request' //get請(qǐng)求 ? export function denglu() { ? return request({ ? ? url: 'login', ? ? method: 'get', ? ? params:{ //此處為傳遞的參數(shù) //get請(qǐng)求一般是不傳遞參數(shù)的 ? ? ? ? password:'123456', ? ? ? ? uerName:'5555555555' ? ? } ? ? // header: { // 已經(jīng)在request.js里面進(jìn)行全局設(shè)置,也可以在請(qǐng)求里面局部設(shè)置其他headers ? ? // ? ?'Content-Type': 'text/plain' ? ? // } ? }) } ?//post請(qǐng)求 export function denglu() { ? return request({ ? ? url: 'login', ? ? method: 'post', ? ? data:{ //此處為傳遞的參數(shù) ? ? ? ? password:'123456', ? ? ? ? uerName:'5555555555' ? ? } ? ? // header: { // 已經(jīng)在request.js里面進(jìn)行全局設(shè)置,也可以在請(qǐng)求里面局部設(shè)置其他headers ? ? // ? ?'Content-Type': 'text/plain' ? ? // } ? }) }
然后需要在vue組件的中 在編寫(xiě)js的地方引入index.js
<script> import denglu from ?"../api/index" </script>
之后就可以在vue組件方法中進(jìn)行應(yīng)用了,下面是我在vue組件中根據(jù)上面的代碼進(jìn)行應(yīng)用的實(shí)例
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
eslint常見(jiàn)的一些報(bào)錯(cuò)及解決方法
這篇文章主要給大家介紹了關(guān)于eslint常見(jiàn)的一些報(bào)錯(cuò)及解決方法,解決eslint的報(bào)錯(cuò)問(wèn)題可以要根據(jù)報(bào)錯(cuò)行數(shù)快速定位.文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03Vue2學(xué)習(xí)筆記之請(qǐng)求數(shù)據(jù)交互vue-resource
本篇文章主要介紹了Vue2學(xué)習(xí)筆記之?dāng)?shù)據(jù)交互vue-resource ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Vue利用路由鉤子token過(guò)期后跳轉(zhuǎn)到登錄頁(yè)的實(shí)例
下面小編就為大家?guī)?lái)一篇Vue利用路由鉤子token過(guò)期后跳轉(zhuǎn)到登錄頁(yè)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Vue中的路由導(dǎo)航守衛(wèi)導(dǎo)航解析流程
這篇文章主要介紹了Vue中的路由導(dǎo)航守衛(wèi)導(dǎo)航解析流程,正如其名,vue-router 提供的導(dǎo)航守衛(wèi)主要用來(lái)通過(guò)跳轉(zhuǎn)或取消的方式守衛(wèi)導(dǎo)航。這里有很多方式植入路由導(dǎo)航中:全局的,單個(gè)路由獨(dú)享的,或者組件級(jí)的2023-04-04vue中的Object.freeze()?優(yōu)化數(shù)據(jù)方式
這篇文章主要介紹了vue中的Object.freeze()優(yōu)化數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04Vue項(xiàng)目數(shù)據(jù)動(dòng)態(tài)過(guò)濾實(shí)踐及實(shí)現(xiàn)思路
這篇文章主要介紹了Vue項(xiàng)目數(shù)據(jù)動(dòng)態(tài)過(guò)濾實(shí)踐,,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Vue2利用Axios發(fā)起請(qǐng)求的詳細(xì)過(guò)程記錄
有很多時(shí)候你在構(gòu)建應(yīng)用時(shí)需要訪問(wèn)一個(gè)API并展示其數(shù)據(jù),做這件事的方法有好幾種,而使用基于promise的HTTP客戶端axios則是其中非常流行的一種,這篇文章主要給大家介紹了關(guān)于Vue2利用Axios發(fā)起請(qǐng)求的詳細(xì)過(guò)程,需要的朋友可以參考下2021-12-12