欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3使用axios并封裝axios請求的詳細步驟

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

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

第一步:安裝axios

npm install axios

第二步:編寫請求文件

新建request.js

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

/**axios封裝
 * 請求攔截、相應攔截、錯誤統(tǒng)一處理
 */
import axios from 'axios';
import QS from 'qs';
import router from '../router/index'
//qs.stringify()是將對象 序列化成URL的形式,以&進行拼接
//  let protocol = window.location.protocol; //協(xié)議
//  let host = window.location.host; //主機
//  axios.defaults.baseURL = protocol + "http://" + host;
axios.defaults.baseURL = '/api'
axios.interceptors.request.use( //響應攔截
    async config => {
        // 每次發(fā)送請求之前判斷vuex中是否存在token        
        // 如果存在,則統(tǒng)一在http請求的header都加上token,這樣后臺根據(jù)token判斷你的登錄情況
        // 即使本地存在token,也有可能token是過期的,所以在響應攔截器中要對返回狀態(tài)進行判斷 
        config.headers.token = sessionStorage.getItem('token')
        return config;
    },
    error => {
        return Promise.error(error);
    })
// 響應攔截器
axios.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return Promise.resolve(response); //進行中        
        } else {
            return Promise.reject(response); //失敗       
        }
    },
    // 服務器狀態(tài)碼不是200的情況    
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                // 401: 未登錄                
                // 未登錄則跳轉登錄頁面,并攜帶當前頁面的路徑                
                // 在登錄成功后返回當前頁面,這一步需要在登錄頁操作。                
                case 401:
                    break
                // 403 token過期                
                // 登錄過期對用戶進行提示                
                // 清除本地token和清空vuex中token對象                
                // 跳轉登錄頁面                
                case 403:
                    sessionStorage.clear()
                    router.push('/login')
                    break
                // 404請求不存在                
                case 404:
                    break;
                // 其他錯誤,直接拋出錯誤提示                
                default:
            }
            return Promise.reject(error.response);
        }
    }
);
/** 
 * get方法,對應get請求 
 * @param {String} url [請求的url地址] 
 * @param {Object} params [請求時攜帶的參數(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方法,對應post請求 
 * @param {String} url [請求的url地址] 
 * @param {Object} params [請求時攜帶的參數(shù)] 
 */
const $post = (url, params) => {
    return new Promise((resolve, reject) => {
        axios.post(url, QS.stringify(params)) //是將對象 序列化成URL的形式,以&進行拼接   
            .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;
    }
}

幾個需要注意的點:

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

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

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

(1)先引入 qs模塊

import QS from 'qs';

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

(3)查看參數(shù)結果,就轉換為了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,否則會報錯

第四步:在組件中使用

引入

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

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

proxy是getCurrentInstance()對象中的一個屬性,然后通過對象的解構賦值方式拿到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)
    })
}

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

相關文章

  • Vue 事件處理操作實例詳解

    Vue 事件處理操作實例詳解

    這篇文章主要介紹了Vue 事件處理操作,結合實例形式較為詳細的分析了vue.js事件處理相關的事件監(jiān)聽、處理、修飾符等相關概念、用法及操作注意事項,需要的朋友可以參考下
    2019-03-03
  • vue slot 在子組件中顯示父組件傳遞的模板

    vue slot 在子組件中顯示父組件傳遞的模板

    這篇文章主要介紹了vue slot 在子組件中顯示父組件傳遞的模板,需要的朋友可以參考下
    2018-03-03
  • proxy代理不生效以及vue?config.js不生效解決方法

    proxy代理不生效以及vue?config.js不生效解決方法

    在開發(fā)Vue項目過程中,使用了Proxy代理進行數(shù)據(jù)劫持,但是在實際運行過程中發(fā)現(xiàn)代理并沒有生效,也就是說數(shù)據(jù)并沒有被劫持,這篇文章主要給大家介紹了關于proxy代理不生效以及vue?config.js不生效解決方法的相關資料,需要的朋友可以參考下
    2023-11-11
  • 一文詳解Vue如何整合Echarts實現(xiàn)可視化界面

    一文詳解Vue如何整合Echarts實現(xiàn)可視化界面

    ECharts,縮寫來自Enterprise Charts,商業(yè)級數(shù)據(jù)圖表,一個純Javascript的圖表庫,可以流暢的運行在PC和移動設備上。本文將在Vue中整合Echarts實現(xiàn)可視化界面,感興趣的可以了解一下
    2022-04-04
  • vue使用高德地圖實現(xiàn)軌跡顯隱效果

    vue使用高德地圖實現(xiàn)軌跡顯隱效果

    本文主要介紹了在vue中如何使用高德地圖實現(xiàn)軌跡顯隱的功能,包括了相關代碼的編寫和具體實現(xiàn)步驟,對于想要在自己的項目中使用這一功能的開發(fā)者有一定的參考價值,希望大家對此有所幫助,同時也歡迎大家多多支持腳本之家
    2024-10-10
  • 解決vue里a標簽值解析變量,跳轉頁面,前面加默認域名端口的問題

    解決vue里a標簽值解析變量,跳轉頁面,前面加默認域名端口的問題

    這篇文章主要介紹了解決vue里a標簽值解析變量,跳轉頁面,前面加默認域名端口的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Animate.css在vue中的使用方式

    Animate.css在vue中的使用方式

    這篇文章主要介紹了Animate.css在vue中的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue項目下npm或yarn下安裝echarts多個版本方式

    vue項目下npm或yarn下安裝echarts多個版本方式

    這篇文章主要介紹了vue項目下npm或yarn下安裝echarts多個版本方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue 音樂App QQ音樂搜索列表最新接口跨域設置方法

    vue 音樂App QQ音樂搜索列表最新接口跨域設置方法

    這篇文章主要介紹了vue 音樂App QQ音樂搜索列表最新接口跨域設置方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Vue 計算屬性 computed

    Vue 計算屬性 computed

    這篇文章主要介紹了Vue 計算屬性 computed,一般情況下屬性都是放到data中的,但是有些屬性可能是需要經(jīng)過一些邏輯計算后才能得出來,那么我們可以把這類屬性變成計算屬性,下面我們來看看具體實例,需要的朋友可以參考一下
    2021-10-10

最新評論