最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3使用axios并封裝axios請求的詳細(xì)步驟

 更新時(shí)間:2023年06月07日 11:53:21   作者:suoh's Blog  
本篇文章分步驟給大家介紹了vue3使用axios并封裝axios請求的詳細(xì)步驟,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友參考下吧

Axios,是一個(gè)基于promise的網(wǎng)絡(luò)請求庫,作用于node.js和瀏覽器中,它是 isomorphic 的(即同一套代碼可以運(yùn)行在瀏覽器和node.js中)。在服務(wù)端它使用原生node.js http模塊, 而在客戶端 (瀏覽端) 則使用XMLHttpRequest。

第一步:安裝axios

npm install axios

第二步:編寫請求文件

新建request.js

簡單的axios封裝,里面相關(guān)提示信息,自己可以引入element-plus去添加

/**axios封裝
 * 請求攔截、相應(yīng)攔截、錯(cuò)誤統(tǒng)一處理
 */
import axios from 'axios';
import QS from 'qs';
import router from '../router/index'
//qs.stringify()是將對象 序列化成URL的形式,以&進(jìn)行拼接
//  let protocol = window.location.protocol; //協(xié)議
//  let host = window.location.host; //主機(jī)
//  axios.defaults.baseURL = protocol + "http://" + host;
axios.defaults.baseURL = '/api'
axios.interceptors.request.use( //響應(yīng)攔截
    async config => {
        // 每次發(fā)送請求之前判斷vuex中是否存在token        
        // 如果存在,則統(tǒng)一在http請求的header都加上token,這樣后臺(tái)根據(jù)token判斷你的登錄情況
        // 即使本地存在token,也有可能token是過期的,所以在響應(yīng)攔截器中要對返回狀態(tài)進(jìn)行判斷 
        config.headers.token = sessionStorage.getItem('token')
        return config;
    },
    error => {
        return Promise.error(error);
    })
// 響應(yīng)攔截器
axios.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return Promise.resolve(response); //進(jìn)行中        
        } else {
            return Promise.reject(response); //失敗       
        }
    },
    // 服務(wù)器狀態(tài)碼不是200的情況    
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                // 401: 未登錄                
                // 未登錄則跳轉(zhuǎn)登錄頁面,并攜帶當(dāng)前頁面的路徑                
                // 在登錄成功后返回當(dāng)前頁面,這一步需要在登錄頁操作。                
                case 401:
                    break
                // 403 token過期                
                // 登錄過期對用戶進(jìn)行提示                
                // 清除本地token和清空vuex中token對象                
                // 跳轉(zhuǎn)登錄頁面                
                case 403:
                    sessionStorage.clear()
                    router.push('/login')
                    break
                // 404請求不存在                
                case 404:
                    break;
                // 其他錯(cuò)誤,直接拋出錯(cuò)誤提示                
                default:
            }
            return Promise.reject(error.response);
        }
    }
);
/** 
 * get方法,對應(yīng)get請求 
 * @param {String} url [請求的url地址] 
 * @param {Object} params [請求時(shí)攜帶的參數(shù)] 
 */
const $get = (url, params) => {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params,
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
/** 
 * post方法,對應(yīng)post請求 
 * @param {String} url [請求的url地址] 
 * @param {Object} params [請求時(shí)攜帶的參數(shù)] 
 */
const $post = (url, params) => {
    return new Promise((resolve, reject) => {
        axios.post(url, QS.stringify(params)) //是將對象 序列化成URL的形式,以&進(jìn)行拼接   
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
//下面是將get和post方法掛載到vue原型上供全局使用、
// vue2.x中是通 Vue.prototype 來綁定的,像這樣Vue.prototype.$toast = Toast。在vue3中取消了Vue.prototype,推薦使用globalProperties來綁定,
export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$axios'] = axios;
    }
}

幾個(gè)需要注意的點(diǎn):

1、我們可以通過window.location.protocol和window.location.host獲取協(xié)議和主機(jī)ip端口,然后統(tǒng)一設(shè)置axios的默認(rèn)請求baseURL

//  let protocol = window.location.protocol; //協(xié)議
//  let host = window.location.host; //主機(jī)
//  axios.defaults.baseURL = protocol + "http://" + host;

2、qs.stringify()是將對象 序列化成URL的形式,以&進(jìn)行拼接

(1)先引入 qs模塊

import QS from 'qs';

(2)在請求參數(shù)前面包裹使用

(3)查看參數(shù)結(jié)果,就轉(zhuǎn)換為了formdata傳參形式,方便快捷、

3、全局掛載,vue2.x中是通 Vue.prototype 來綁定的,例如 Vue.prototype.$toast = Toast。在vue3中取消了Vue.prototype,推薦使用 globalProperties 來綁定,掛載到組件的proxy上

export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$axios'] = axios;
    }
}

第三步:在main.js引入

注意:axios在request.js中已經(jīng)全局引入了,在main.js中就不需要再引入axios,否則會(huì)報(bào)錯(cuò)

第四步:在組件中使用

引入

由于 Vue3中,在setup中無法通過this獲取組件實(shí)例,console.log(this)打印出來的值是undefined。因此我們需要通過getCurrentInstance 方法獲取當(dāng)前組件實(shí)例。

注意:getCurrentInstance只能在setup生命周期鉤子中使用。

proxy是getCurrentInstance()對象中的一個(gè)屬性,然后通過對象的解構(gòu)賦值方式拿到proxy。

import { getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance();

然后通過proxy拿到掛載好的get和post請求。

function testFunc() {
    let data = {
        roleId: "A",
        username: "dpc",
        password: "--",
        sysType: "zhfw",
    }
    proxy.$post("/index/login", data).then((response) => {
        console.log(response)
    })
}

到此這篇關(guān)于vue3使用axios并封裝axios請求的文章就介紹到這了,更多相關(guān)vue3封裝axios請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • element-ui如何取消el-table的hover狀態(tài)(取消高亮顯示)

    element-ui如何取消el-table的hover狀態(tài)(取消高亮顯示)

    在一個(gè)項(xiàng)目中需要對element-ui的table組件進(jìn)行一些樣式的修改,其中就包括對hover效果的處理,下面這篇文章主要給大家介紹了關(guān)于element-ui如何取消el-table的hover狀態(tài)(取消高亮顯示)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue中數(shù)組常用的6種循環(huán)方法代碼示例

    vue中數(shù)組常用的6種循環(huán)方法代碼示例

    在vue項(xiàng)目開發(fā)中,我們需要對數(shù)組進(jìn)行處理等問題,這里簡單記錄遍歷數(shù)組的幾種方法,這篇文章主要給大家介紹了關(guān)于vue中數(shù)組常用的6種循環(huán)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • 簡單談?wù)刅ue3中的ref和reactive

    簡單談?wù)刅ue3中的ref和reactive

    vue3中實(shí)現(xiàn)響應(yīng)式數(shù)據(jù)的方法是就是使用ref和reactive,所謂響應(yīng)式就是界面和數(shù)據(jù)同步,能實(shí)現(xiàn)實(shí)時(shí)更新,下面這篇文章主要給大家介紹了關(guān)于Vue3中ref和reactive的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Vuejs對象常用操作之取對應(yīng)的值、取key和value值、轉(zhuǎn)數(shù)組及合并等

    Vuejs對象常用操作之取對應(yīng)的值、取key和value值、轉(zhuǎn)數(shù)組及合并等

    最近在學(xué)Vue和javascript感覺js的好多方法都不太清楚,這里徹底總結(jié)下,這篇文章主要給大家介紹了關(guān)于Vuejs對象常用操作之取對應(yīng)的值、取key和value值、轉(zhuǎn)數(shù)組及合并等的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • vue3在自定義hooks中使用useRouter報(bào)錯(cuò)的解決方案

    vue3在自定義hooks中使用useRouter報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了vue3在自定義hooks中使用useRouter報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue動(dòng)態(tài)組件?component?:is的使用代碼示范

    Vue動(dòng)態(tài)組件?component?:is的使用代碼示范

    vue?動(dòng)態(tài)組件用于實(shí)現(xiàn)在指定位置上,動(dòng)態(tài)加載不同的組件,這篇文章主要介紹了Vue動(dòng)態(tài)組件?component?:is的使用,需要的朋友可以參考下
    2023-09-09
  • 淺析Vue中混入mixin的實(shí)現(xiàn)

    淺析Vue中混入mixin的實(shí)現(xiàn)

    混入 (mixin) 提供了一種非常靈活的方式,來分發(fā) Vue 組件中的可復(fù)用功能,下面就跟隨小編一起來了解一下Vue中混入mixin的實(shí)現(xiàn)吧
    2024-11-11
  • Vue路由守衛(wèi)案例代碼

    Vue路由守衛(wèi)案例代碼

    在Vue中,路由守衛(wèi)分為三種:全局路由守衛(wèi)、獨(dú)享路由守衛(wèi)以及組件內(nèi)路由守衛(wèi),本文重點(diǎn)介紹Vue路由守衛(wèi)案例代碼,需要的朋友可以參考下
    2023-02-02
  • 解決VUE項(xiàng)目localhost端口服務(wù)器拒絕連接,只能用127.0.0.1的問題

    解決VUE項(xiàng)目localhost端口服務(wù)器拒絕連接,只能用127.0.0.1的問題

    這篇文章主要介紹了解決VUE項(xiàng)目localhost端口服務(wù)器拒絕連接,只能用127.0.0.1的問題
    2020-08-08
  • 深入探索Vue3.x中的七大高級用法

    深入探索Vue3.x中的七大高級用法

    Vue3.x 自發(fā)布以來,憑借其性能的顯著提升和更加靈活的組合式 API,已經(jīng)成為了現(xiàn)代前端開發(fā)的重要工具之一,除了基本用法外,Vue3.x 還提供了許多高級功能,本文將和大家一起深入探索Vue3.x中的七大高級用法,需要的朋友可以參考下
    2024-03-03

最新評論

富民县| 治多县| 张家口市| 井研县| 山西省| 邛崃市| 加查县| 河北区| 呼图壁县| 宿松县| 绵阳市| 东阳市| 顺昌县| 临漳县| 台前县| 吉首市| 土默特右旗| 巩留县| 绍兴市| 遂宁市| 东乡族自治县| 自治县| 湖州市| 沧州市| 乌苏市| 太仆寺旗| 寿阳县| 广州市| 来安县| 瑞金市| 尖扎县| 尉犁县| 盐边县| 大丰市| 霍州市| 霍城县| 修水县| 枞阳县| 景洪市| 来宾市| 庆元县|