溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vue項(xiàng)目如何使用axios封裝request請(qǐng)求

發(fā)布時(shí)間:2023-04-21 15:57:20 來源:億速云 閱讀:110 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“vue項(xiàng)目如何使用axios封裝request請(qǐng)求”,在日常操作中,相信很多人在vue項(xiàng)目如何使用axios封裝request請(qǐng)求問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”vue項(xiàng)目如何使用axios封裝request請(qǐng)求”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

一、封裝axios

1.src 目錄中新建utils文件夾
2.utils文件中建立request.js文件

vue項(xiàng)目如何使用axios封裝request請(qǐng)求

request.js文件的內(nèi)容
<1> 導(dǎo)入axios
<2> 我們可以聲明一個(gè)新的常量axios 我們可以配置一些基礎(chǔ) 公共的路徑配置 比如說baseURL timeout請(qǐng)求失敗超時(shí)報(bào)錯(cuò) withcookies&hellip;之類的東西

<3> 設(shè)置請(qǐng)求攔截
新的常量axios service.攔截器.請(qǐng)求.使用===》 里頭有兩個(gè)參數(shù) 一個(gè)成功的回調(diào)函數(shù) 一個(gè)失敗的回調(diào)函數(shù)
<4> 設(shè)置響應(yīng)攔截
<5> 導(dǎo)出 導(dǎo)出這個(gè)模塊

完整代碼:

import axios from 'axios'
import { Notification } from 'element-ui'
// 創(chuàng)建axios實(shí)例
const service = axios.create({
    // baseURL: 'http://192.168.1.69:5000',
    baseURL: process.env.API_ROOT,
    timeout: 80000, // 請(qǐng)求超時(shí)時(shí)間
     withCredentials: true,
    // crossDomain: true
})

// request攔截器
service.interceptors.request.use(
    config => {
        if (getToken()) {
             config.headers['Authorization'] = getToken() // 讓每個(gè)請(qǐng)求攜帶自定義token 請(qǐng)根據(jù)實(shí)際情況自行修改
         }
        var lang = localStorage.getItem('lang')//因?yàn)轫?xiàng)目中使用到了i18n國際化語言配置,請(qǐng)根據(jù)實(shí)際情況自行修改
        if (!lang) {
            lang = 'zh_CN'
        }
        config.headers['Accept-Language'] = lang.replace(/_/g, '-')
        config.headers['Content-Type'] = 'application/json'
        return config
    },
    error => {
        Promise.reject(error)
    }
)

// response 攔截器
service.interceptors.response.use(
    response => {
        return response.data
    },
    error => {
        // 兼容blob下載出錯(cuò)json提示
        if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) {
            const reader = new FileReader()
            reader.readAsText(error.response.data, 'utf-8')
            reader.onload = function (e) {
                const errorMsg = JSON.parse(reader.result).message
                Notification.error({
                    title: errorMsg,
                    duration: 5000
                })
            }
        } else {
            let code = 0
            try {
                code = error.response.data.status
            } catch (e) {
                if (error.toString().indexOf('Error: timeout') !== -1) {
                    Notification.error({
                        title: '網(wǎng)絡(luò)請(qǐng)求超時(shí)',
                        duration: 5000
                    })
                    return Promise.reject(error)
                }
            }

            if (code) {
                 if (code === 401) {
                     store.dispatch('LogOut').then(() => {
                         // 用戶登錄界面提示
                         Cookies.set('point', 401)
                         location.reload()
                    })
                 } else if (code === 403) {
                     router.push({ path: '/401' })
                 } else {
                const errorMsg = error.response.data.message
                if (errorMsg !== undefined) {
                    Notification.error({
                        title: errorMsg,
                        duration: 0
                    })
                }
              }
            } else {
                Notification.error({
                    title: '接口請(qǐng)求失敗',
                    duration: 5000
                })
            }
        }
        return Promise.reject(error)
    }
)
export default service

二、封裝api 函數(shù)

vue項(xiàng)目如何使用axios封裝request請(qǐng)求

1.先導(dǎo)入封裝好的新的axios
2.然后我們可以封裝一些接口函數(shù) 比如說 登錄的 注冊(cè)的 首頁的 分類的 輪播的 //但是要確認(rèn)參數(shù)傳的是get還是post請(qǐng)求

tips://比如說以后我們要維護(hù)封裝好的接口 這樣封裝好后我們就不需要去組件里一個(gè)一個(gè)去找,直接來這個(gè)文件修改即可
//組件化開模塊化發(fā)或者開發(fā) 它們都有一個(gè)原則
//高聚合 低耦合
//高聚合就是 一個(gè)組件的業(yè)務(wù)一定要聚合在一起 一個(gè)組件的業(yè)務(wù)越集中越好
//低耦合就是 組件和組件之間的耦合度一定要低 意思就是兩個(gè)組件之間的牽連越少越好

vue項(xiàng)目如何使用axios封裝request請(qǐng)求

三、頁面中使用

<script>標(biāo)簽中引入
import {
  getSetbrate,randomtest,autocalibrate,lightCheck,writeserial} from "@/api/mAdmin";

方法中調(diào)用

vue項(xiàng)目如何使用axios封裝request請(qǐng)求

   // 設(shè)置閾值 獲取閾值
  onManualSend() {
      let data = {
        command: this.command,
      };
      writeserial(data).then((res) => {
        this.manualText = res.msg;
      });
    },

到此,關(guān)于“vue項(xiàng)目如何使用axios封裝request請(qǐng)求”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI