国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
一、創(chuàng)建文件夾存放封裝好的js
二、封裝代碼如下
三、配置
四、在需要的組件中使用
補(bǔ)充:通過具體配置解決跨域問題CORS
首頁 web前端 Vue.js vue3中封裝Axios請求及在組件中使用的方法是什么

vue3中封裝Axios請求及在組件中使用的方法是什么

May 21, 2023 am 10:49 AM
vue3 axios

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

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

vue3中封裝Axios請求及在組件中使用的方法是什么

二、封裝代碼如下

直接將下面代碼復(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 + "//" + 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é)議中有任何一個不同,就被認(rèn)為是跨域。這里不具體解釋,想了解的可以查資料。

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

  2. pathRewrite: {"^/webPage": "***",},表示路由重寫將/webPage替換為***

以上是vue3中封裝Axios請求及在組件中使用的方法是什么的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
在Vue應(yīng)用中使用axios時出現(xiàn)“Uncaught (in promise) Error: Request failed with status code 500”怎么辦? 在Vue應(yīng)用中使用axios時出現(xiàn)“Uncaught (in promise) Error: Request failed with status code 500”怎么辦? Jun 24, 2023 pm 05:33 PM

在Vue應(yīng)用中使用axios是十分常見的,axios是一種基于Promise的HTTP客戶端,可以用于瀏覽器和Node.js。在開發(fā)過程中,有時會出現(xiàn)“Uncaught(inpromise)Error:Requestfailedwithstatuscode500”的錯誤提示,對于開發(fā)者來說,這個錯誤提示可能有些難以理解和解決。本文將會探討這

在Vue應(yīng)用中使用axios時出現(xiàn)“Error: Network Error”怎么解決? 在Vue應(yīng)用中使用axios時出現(xiàn)“Error: Network Error”怎么解決? Jun 25, 2023 am 08:27 AM

在Vue應(yīng)用中使用axios時出現(xiàn)“Error:NetworkError”怎么解決?在Vue應(yīng)用的開發(fā)中,我們經(jīng)常會使用到axios進(jìn)行API的請求或數(shù)據(jù)的獲取,但是有時我們會遇到axios請求出現(xiàn)“Error:NetworkError”的情況,這時我們該怎么辦呢?首先,需要了解“Error:NetworkError”是什么意思,它通常表示網(wǎng)絡(luò)連

在Vue應(yīng)用中使用axios時出現(xiàn)“TypeError: Failed to fetch”怎么辦? 在Vue應(yīng)用中使用axios時出現(xiàn)“TypeError: Failed to fetch”怎么辦? Jun 24, 2023 pm 11:03 PM

最近,在使用Vue應(yīng)用開發(fā)過程中,我遇到了一個常見的問題:“TypeError:Failedtofetch”錯誤提示。這個問題出現(xiàn)在使用axios進(jìn)行HTTP請求時,后端服務(wù)器沒有正確響應(yīng)請求時發(fā)生。這種錯誤提示通常表明請求無法到達(dá)服務(wù)器,可能是由于網(wǎng)絡(luò)原因或服務(wù)器未響應(yīng)造成的。出現(xiàn)這個錯誤提示后,我們應(yīng)該怎么辦呢?以下是一些解決方法:檢查網(wǎng)絡(luò)連接由于

Vue中數(shù)據(jù)請求的選擇:Axios or Fetch? Vue中數(shù)據(jù)請求的選擇:Axios or Fetch? Jul 17, 2023 pm 06:30 PM

Vue中數(shù)據(jù)請求的選擇:AxiosorFetch?在Vue開發(fā)中,處理數(shù)據(jù)請求是一個非常常見的任務(wù)。而選擇使用哪種工具來進(jìn)行數(shù)據(jù)請求,則是一個需要考慮的問題。在Vue中,最常見的兩種工具是Axios和Fetch。本文將會比較這兩種工具的優(yōu)缺點,并給出一些示例代碼來幫助你做出選擇。Axios是一個基于Promise的HTTP客戶端,可以在瀏覽器和Node.

Vue3中怎么實現(xiàn)選取頭像并裁剪 Vue3中怎么實現(xiàn)選取頭像并裁剪 May 29, 2023 am 10:22 AM

最終效果安裝VueCropper組件yarnaddvue-cropper@next上面的安裝值針對Vue3的,如果時Vue2或者想使用其他的方式引用,請訪問它的npm官方地址:官方教程。在組件中引用使用時也很簡單,只需要引入對應(yīng)的組件和它的樣式文件,我這里沒有在全局引用,只在我的組件文件中引入import{userInfoByRequest}from'../js/api'import{VueCropper}from'vue-cropper&

高效利用Vue和Axios實現(xiàn)前端數(shù)據(jù)的批量處理 高效利用Vue和Axios實現(xiàn)前端數(shù)據(jù)的批量處理 Jul 17, 2023 pm 10:43 PM

高效利用Vue和Axios實現(xiàn)前端數(shù)據(jù)的批量處理在前端開發(fā)中,數(shù)據(jù)的處理是一個常見的任務(wù)。當(dāng)我們需要處理大量數(shù)據(jù)時,如果沒有有效的方法,處理數(shù)據(jù)將會變得十分繁瑣和低效。Vue是一種優(yōu)秀的前端框架,而Axios是一個流行的網(wǎng)絡(luò)請求庫,它們可以協(xié)同工作來實現(xiàn)前端數(shù)據(jù)的批量處理。本文將詳細(xì)介紹如何高效利用Vue和Axios來進(jìn)行數(shù)據(jù)的批量處理,并提供相關(guān)的代碼示例

在Vue應(yīng)用中使用axios時出現(xiàn)“Error: timeout of xxxms exceeded”怎么辦? 在Vue應(yīng)用中使用axios時出現(xiàn)“Error: timeout of xxxms exceeded”怎么辦? Jun 24, 2023 pm 03:27 PM

在Vue應(yīng)用中使用axios時出現(xiàn)“Error:timeoutofxxxmsexceeded”怎么辦?隨著互聯(lián)網(wǎng)的快速發(fā)展,前端技術(shù)也在不斷地更新迭代,Vue作為一種優(yōu)秀的前端框架,近年來受到大家的歡迎。在Vue應(yīng)用中,我們常常需要使用axios來進(jìn)行網(wǎng)絡(luò)請求,但是有時候會出現(xiàn)“Error:timeoutofxxxmsexceeded”的錯誤

Vue實現(xiàn)文件上傳的完整指南(axios、element-ui) Vue實現(xiàn)文件上傳的完整指南(axios、element-ui) Jun 09, 2023 pm 04:12 PM

Vue實現(xiàn)文件上傳的完整指南(axios、element-ui)在現(xiàn)代Web應(yīng)用程序中,文件上傳已經(jīng)成為一項基本的功能。無論是上傳頭像、圖片、文檔或者視頻,我們都需要一個可靠的方法來將文件從用戶的計算機(jī)上傳到服務(wù)器中。本文將為您提供一份詳細(xì)的指南,介紹如何使用Vue、axios和element-ui來實現(xiàn)文件上傳。什么是axiosaxios是一個基于prom

See all articles