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

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

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

四、在需要的組件中使用

重點(diǎn)來了,封裝完了,歸根到底我得用。在組件中導(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)文章

  • 分享一個基于Ace的Markdown編輯器

    分享一個基于Ace的Markdown編輯器

    相信開發(fā)中或多或少都會有使用md的時候。那么一個簡易的md編輯器顯得尤為重要,如果想要在自己的項目中添加一個md編輯器,那么不妨來看看這篇文章
    2021-10-10
  • .eslintrc配置目錄及配置項的使用方式

    .eslintrc配置目錄及配置項的使用方式

    這篇文章主要介紹了.eslintrc配置目錄及配置項的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue 打包上線后的緩存問題解決

    Vue 打包上線后的緩存問題解決

    在使用vue腳手架搭建前端工程時,經(jīng)常會遇到打包上線后的緩存問題,許多開發(fā)者會直接在index.html中加入類似以下代碼來解決緩存問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-11-11
  • Vue3之getCurrentInstance與ts結(jié)合使用的方式

    Vue3之getCurrentInstance與ts結(jié)合使用的方式

    這篇文章主要介紹了Vue3之getCurrentInstance與ts結(jié)合使用的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue實(shí)現(xiàn)引入本地json的方法分析

    vue實(shí)現(xiàn)引入本地json的方法分析

    這篇文章主要介紹了vue實(shí)現(xiàn)引入本地json的方法,結(jié)合實(shí)例形式分析了vue.js加載本地json文件及解析json數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • 解決vue-cli項目sourcemap因為文件重名導(dǎo)致的文件定位映射錯誤問題

    解決vue-cli項目sourcemap因為文件重名導(dǎo)致的文件定位映射錯誤問題

    這篇文章主要介紹了解決vue-cli項目sourcemap因為文件重名導(dǎo)致的文件定位映射錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue.js動態(tài)修改background-image問題

    vue.js動態(tài)修改background-image問題

    這篇文章主要介紹了vue.js動態(tài)修改background-image問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue 使用iView組件中的Table實(shí)現(xiàn)定時自動滾動效果

    vue 使用iView組件中的Table實(shí)現(xiàn)定時自動滾動效果

    要在css中設(shè)置table的高度,使數(shù)據(jù)過多時出現(xiàn)滾動條,將縱向設(shè)置為overflow-y: auto;橫向設(shè)置隱藏 overflow-x: hidden,接下來通過本文介紹vue使用iView組件中的Table實(shí)現(xiàn)定時自動滾動效果,需要的朋友可以參考下
    2024-05-05
  • vue動態(tài)綁定class選中當(dāng)前列表變色的方法示例

    vue動態(tài)綁定class選中當(dāng)前列表變色的方法示例

    這篇文章主要介紹了vue動態(tài)綁定class選中當(dāng)前列表變色的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • vue+egg+jwt實(shí)現(xiàn)登錄驗證的示例代碼

    vue+egg+jwt實(shí)現(xiàn)登錄驗證的示例代碼

    這篇文章主要介紹了vue+egg+jwt實(shí)現(xiàn)登錄驗證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評論

武宣县| 绥阳县| 孝义市| 宾阳县| 彭州市| 额尔古纳市| 湘乡市| 遂川县| 沅陵县| 隆子县| 中江县| 通河县| 丽江市| 同仁县| 桑日县| 宝应县| 昌邑市| 泉州市| 桓台县| 永福县| 龙州县| 云浮市| 海阳市| 南靖县| 城市| 桐梓县| 柳江县| 延津县| 正阳县| 扶沟县| 富阳市| 北辰区| 汉源县| 栾川县| 时尚| 桑日县| 全州县| 霸州市| 沅陵县| 安岳县| 临城县|