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

vue3+axios封裝攔截器方式

 更新時(shí)間:2024年09月18日 09:54:43   作者:jnfy  
介紹了如何在Vue項(xiàng)目中使用Axios封裝請(qǐng)求、配置攔截器,并在api.js中統(tǒng)一管理API接口,同時(shí),也講解了如何在vite.config.js中配置解決跨域問(wèn)題,這些操作可以優(yōu)化前端代碼結(jié)構(gòu),提高開(kāi)發(fā)效率

安裝axios

 yarn add axios
 npm install axios

封裝請(qǐng)求配置攔截器

src/api/axios.js中封裝我們的請(qǐng)求。

import axios from "axios";
import {useCommonStore} from "../store/module/common.js";
import {storeToRefs} from "pinia";

// 設(shè)置接口超時(shí)時(shí)間
axios.defaults.timeout = 60000;
// 請(qǐng)求地址
axios.defaults.baseURL = '';

// http request 攔截器
axios.interceptors.request.use(
    config =>{
        // 獲取token
        const  commonStore = useCommonStore()
        const { token } = storeToRefs( commonStore )
        console.log('token',token.value)
        // 配置請(qǐng)求頭
        config.headers = {
            // 'Content-Type':'application/x-www-form-urlencoded',   // 傳參方式表單
            'Content-Type': 'application/json;charset=UTF-8', // 傳參方式j(luò)son
            'Authorization': `Bearer ${token.value}`, // 設(shè)置Authorization
            // 'token': token.value // 或者設(shè)置token

        };
        return config;
    },
    error => {
        return Promise.reject(error);
    }
)

// http response 攔截器
axios.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        const { response } = error;
        if (response) {
            // 判斷錯(cuò)誤狀態(tài)碼
            if (response.status === 400) {
                // 請(qǐng)求400
            } else if (response.status === 401) {
                // 未授權(quán),請(qǐng)重新登錄
            } else if (response.status === 403) {
                // 拒絕訪問(wèn)(403)
            }
            return Promise.reject(response.data);
        } else {
            console.log('網(wǎng)絡(luò)連接異常,請(qǐng)稍后再試!')
        }
    }
)

// 封裝 get post 請(qǐng)求
export function request (url,params = {},type = 'POST') {
    return new Promise((resolve,reject) => {
        let promise
        if (type.toUpperCase() === 'GET') {
            promise = axios({url,params})
        } else if (type.toUpperCase() === 'POST') {
            promise = axios({
                method: 'POST',
                url,
                data: params
            })
        }

        promise.then( res => {
            resolve(res)
        }).catch (err => {
            reject(err)
        })
    })
}

api統(tǒng)一管理

src/api/api.js文件中統(tǒng)一管理我們的接口api

// 引入 request
import { request } from "./axios.js"

// 模塊化接口
export class UserApi {
    static async login(params) {
        return request('/login',params,'post')
    }
    static async register(params) {
        return request('/register',params,'post')
    }
    static async getUserInfo(params) {
        return request('/userInfo',params,'get')
    }
}

export class BookApi {
    static async getBookList(params) {
        return request('/bookList',params,'get')
    }
}

應(yīng)用

<script setup>
import {UserApi} from "../api/api.js";
const login = async () => {
  const params = {
    username: 'admin',
    password: '123456',
  }
  const res = await UserApi.login(params)
}
</script>

跨域問(wèn)題

vite.config.js配置。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from "path";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  server: {
    host: '127.0.0.1',
    port: 3000,
    proxy: {
      '/api': {
        target: '', // 實(shí)際請(qǐng)求地址
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      }
    }
  },
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue-axios使用詳解

    vue-axios使用詳解

    本篇文章主要介紹了vue-axios使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • vue3+ts中定義ref變量,設(shè)置變量類型方式

    vue3+ts中定義ref變量,設(shè)置變量類型方式

    這篇文章主要介紹了vue3+ts中定義ref變量,設(shè)置變量類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue 重置組件到初始狀態(tài)的方法示例

    Vue 重置組件到初始狀態(tài)的方法示例

    這篇文章主要介紹了Vue 重置組件到初始狀態(tài)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • vue mounted 調(diào)用兩次的完美解決辦法

    vue mounted 調(diào)用兩次的完美解決辦法

    在開(kāi)發(fā)中發(fā)現(xiàn)其中一個(gè)頁(yè)面moutned調(diào)用了兩次,而其他頁(yè)面正常,表示很懵逼,然后查找原因,終于找到了,其實(shí)歸根到底是要知道m(xù)ounted的調(diào)用機(jī)制問(wèn)題。這篇文章主要介紹了vue mounted 調(diào)用兩次的解決辦法,需要的朋友可以參考下
    2018-10-10
  • vue移動(dòng)端路由切換實(shí)例分析

    vue移動(dòng)端路由切換實(shí)例分析

    本篇文章給大家分享了vue移動(dòng)端路由切換實(shí)例以及相關(guān)知識(shí)點(diǎn),對(duì)此有興趣的朋友可以參考學(xué)習(xí)下。
    2018-05-05
  • vue-devtools的安裝步驟

    vue-devtools的安裝步驟

    vue-devtools 是一款基于chrome游覽器的插件,用于調(diào)試vue應(yīng)用,這篇文章分步驟給大家介紹了vue-devtools的安裝方法,需要的朋友參考下吧
    2018-04-04
  • vue3+element-plus+vite實(shí)現(xiàn)動(dòng)態(tài)路由菜單方式

    vue3+element-plus+vite實(shí)現(xiàn)動(dòng)態(tài)路由菜單方式

    文章詳細(xì)介紹了如何使用Vite搭建一個(gè)Vue 3 TypeScript項(xiàng)目,并配置了路由、狀態(tài)管理、插件和環(huán)境,項(xiàng)目結(jié)構(gòu)包括路由持久化、白名單、動(dòng)態(tài)路由和權(quán)限控制,此外,還模擬了一個(gè)后端返回的路由數(shù)據(jù)文件
    2025-01-01
  • vue輸入節(jié)流,避免實(shí)時(shí)請(qǐng)求接口的實(shí)例代碼

    vue輸入節(jié)流,避免實(shí)時(shí)請(qǐng)求接口的實(shí)例代碼

    今天小編就為大家分享一篇vue輸入節(jié)流,避免實(shí)時(shí)請(qǐng)求接口的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • vue2.0實(shí)現(xiàn)音樂(lè)/視頻播放進(jìn)度條組件

    vue2.0實(shí)現(xiàn)音樂(lè)/視頻播放進(jìn)度條組件

    這篇文章主要為大家詳細(xì)介紹了vue2.0實(shí)現(xiàn)音樂(lè)和視頻播放進(jìn)度條組件的思路及具體實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • vue前端優(yōu)雅展示后端十萬(wàn)條數(shù)據(jù)面試點(diǎn)剖析

    vue前端優(yōu)雅展示后端十萬(wàn)條數(shù)據(jù)面試點(diǎn)剖析

    這篇文章主要為大家介紹了vue前端優(yōu)雅展示后端十萬(wàn)條數(shù)據(jù)的考點(diǎn)剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論