亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue3中封裝Axios請求及在組件中使用詳解

 更新時間:2023年04月24日 10:25:13   作者:辣椒炒肉-  
目前前端最流行的網(wǎng)絡(luò)請求庫還是axios,所以對axios的封裝很有必要,下面這篇文章主要給大家介紹了關(guān)于vue3中封裝Axios請求及在組件中使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

 這篇文章直接能夠在項目中使用,沒有解釋什么東西,直接復(fù)制粘貼,嘎嘎用。

一、創(chuàng)建文件夾存放封裝好的js

我是創(chuàng)建在src/request/axios.js

二、封裝代碼如下

直接將下面代碼復(fù)制在request.js中,封裝了get,post請求,需要自己配置的是:自己的請求地址,tokenKey是否為token,改為自己存入本地的token名,可以看一下代碼中的注釋,很好看懂。

/**axios封裝
 * 請求攔截、相應(yīng)攔截、錯誤統(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 = 'http://localhost:8888'
 
axios.interceptors.request.use( //響應(yīng)攔截
        async config => {
            // 每次發(fā)送請求之前判斷vuex中是否存在token        
            // 如果存在,則統(tǒng)一在http請求的header都加上token,這樣后臺根據(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;
                    // 其他錯誤,直接拋出錯誤提示                
                default:
            }
            return Promise.reject(error.response);
        }
    }
);
/** 
 * get方法,對應(yīng)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方法,對應(yīng)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的形式,以&進(jìn)行拼接   
                .then(res => {
                    resolve(res.data);
                })
                .catch(err => {
                    reject(err.data)
                })
        });
    }
    //下面是vue3必須加的,vue2不需要,只需要暴露出去get,post方法就可以
export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$axios'] = axios;
    }
}

三、配置

在main.js中,引入我們第一步封裝的js,然后use()

//引入封裝Axios請求
import Axios from './request/axios';
 
const app = createApp(App).use(VueAxios, axios).use(ElementPlus).use(router).use(Axios)

四、在需要的組件中使用

重點來了,封裝完了,歸根到底我得用。在組件中導(dǎo)入getCurrentInstance。加上如下代碼。

import {  getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
  function logout(){
    proxy.$post("/sysStaff/logout",{}).then((response)=>{
      console.log(response)
      if(response.code == 200){
        sessionStorage.clear();
        router.push('/')
        ElMessage({
          message: '退出成功',
          type: 'success',
        })
      }
    })
  }

調(diào)用的時候,當(dāng)中有兩個參數(shù),第一個參數(shù)是路徑,第二個參數(shù)是個對象,里面可以寫要發(fā)送請求的參數(shù),比如:username:shuaibi,password:123456。

補(bǔ)充:通過具體配置解決跨域問題CORS

安裝第三方包webpack-dev-server

不安裝沒有devServer配置項,必須安裝

npm install webpack-dev-server

在根目錄vue.config.js中寫入如下配置

module.exports = {
  // 關(guān)閉語法檢查
  lintOnSave: false,
  // 解決axios發(fā)送請求時的跨域問題,不做配置會報錯如下↓↓↓↓
  // ccess to XMLHttpRequest at 'http://127.0.0.1:23456/webPage/home_notice.post' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  devServer: {
    // https: false,
    proxy: {
      //  /api 表示攔截以/api開頭的請求路徑
      "/webPage": {
        target: "http://127.0.0.1:23456/", // 跨域的域名(不需要重寫路徑)
        ws: false, // 是否開啟websockede
        changeOrigin: true, // 是否開啟跨域
        // pathRewrite: {
        //   "^/webPage": "",
        // },
      },
    },
  },
};

瀏覽器從一個域名的網(wǎng)頁去請求另一個域名的資源時,域名、端口、協(xié)議任一不同,都是跨域。這里不具體解釋,想了解的可以查資料。

  1. devServer配置項可以開啟一個反向代理,來解決跨域問題。之前所有的地址拼接可以得到
    /webPage/cooperater.post…最終發(fā)起請求時,如果沒有寫pathRewrite則表示查找/webPage并在其前拼接target中的地址。最會向http://127.0.0.1:23456/webPage/cooperater.post口發(fā)起請求。
  2. pathRewrite: {"^/webPage": "***",},表示路由重寫將/webPage替換為***

總結(jié)

vue項目當(dāng)中對axios請求的封裝就是如此,非常的容易?。。?/p>

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

相關(guān)文章

  • vue中兄弟組件傳值的兩種方式小結(jié)

    vue中兄弟組件傳值的兩種方式小結(jié)

    這篇文章主要介紹了vue中兄弟組件傳值的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。
    2022-07-07
  • vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染

    vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染

    這篇文章主要介紹了vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue中使用Printjs插件實現(xiàn)打印功能

    Vue中使用Printjs插件實現(xiàn)打印功能

    Print.js 主要是為了幫助我們直接在我們的應(yīng)用程序中打印 PDF 文件,無需離開界面,也無需使用嵌入,這篇文章主要介紹了Vue中使用Printjs插件實現(xiàn)打印功能,需要的朋友可以參考下
    2022-08-08
  • vue-以文件流-blob-的形式-下載-導(dǎo)出文件操作

    vue-以文件流-blob-的形式-下載-導(dǎo)出文件操作

    這篇文章主要介紹了vue-以文件流-blob-的形式-下載-導(dǎo)出文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue自動化路由的實現(xiàn)代碼

    vue自動化路由的實現(xiàn)代碼

    這篇文章主要介紹了vue自動化路由的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue?點擊按鈕?路由跳轉(zhuǎn)指定頁面的實現(xiàn)方式

    vue?點擊按鈕?路由跳轉(zhuǎn)指定頁面的實現(xiàn)方式

    這篇文章主要介紹了vue?點擊按鈕?路由跳轉(zhuǎn)指定頁面的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue中computed(計算屬性)和watch(監(jiān)聽屬性)的用法及區(qū)別說明

    Vue中computed(計算屬性)和watch(監(jiān)聽屬性)的用法及區(qū)別說明

    這篇文章主要介紹了Vue中computed(計算屬性)和watch(監(jiān)聽屬性)的用法及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue實現(xiàn)二級彈框案例

    vue實現(xiàn)二級彈框案例

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)二級彈框案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • vue中父組件通過props向子組件傳遞數(shù)據(jù)但子組件接收不到解決辦法

    vue中父組件通過props向子組件傳遞數(shù)據(jù)但子組件接收不到解決辦法

    大家都知道可以使用props將父組件的數(shù)據(jù)傳給子組件,下面這篇文章主要給大家介紹了關(guān)于vue中父組件通過props向子組件傳遞數(shù)據(jù)但子組件接收不到的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Vue開發(fā)中Jwt的使用詳解

    Vue開發(fā)中Jwt的使用詳解

    Vue中使用JWT進(jìn)行身份認(rèn)證也是一種常見的方式,它能夠更好地保護(hù)用戶的信息,本文主要介紹了Vue開發(fā)中Jwt的使用詳解,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12

最新評論