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

