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)文章
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-01vue輸入節(jié)流,避免實(shí)時(shí)請(qǐng)求接口的實(shí)例代碼
今天小編就為大家分享一篇vue輸入節(jié)流,避免實(shí)時(shí)請(qǐng)求接口的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10vue2.0實(shí)現(xiàn)音樂(lè)/視頻播放進(jìn)度條組件
這篇文章主要為大家詳細(xì)介紹了vue2.0實(shí)現(xiàn)音樂(lè)和視頻播放進(jìn)度條組件的思路及具體實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06vue前端優(yōu)雅展示后端十萬(wàn)條數(shù)據(jù)面試點(diǎn)剖析
這篇文章主要為大家介紹了vue前端優(yōu)雅展示后端十萬(wàn)條數(shù)據(jù)的考點(diǎn)剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07