vue3 ts 封装axios,配置axios前置拦截器,让所有axios请求携带token
http.ts
import axios from 'axios'
import router from '@/router'
import Qs from 'qs'
import { ElMessage } from 'element-plus'const { prefixBasePath } = require('../../../config/basePath')
axios.defaults.baseURL = prefixBasePath;
axios.interceptors.request.use(config => {let authorization = localStorage.getItem("Authorization");if (authorization) {config.headers['Authorization'] = authorization;}return config;
}, error => {
Promise.reject(error);
})
export function getOneOrAllData(url: any, params: any, hideTips: any) {return new Promise((resolve, reject) => {showLoading()axios.get(url, {params: params,paramsSerializer: {serialize: function (params) {return Qs.stringify(params, { arrayFormat: 'repeat' })}},}).then(res => {hideLoading()switch (res.data.code) {case 401:jumpToLogin()breakcase 500:ElMessage.error(res.data.message)breakcase 200:resolve(res.data)breakdefault:Toast(res.data.message)resolve(res.data)break}}).catch(err => {errMsg(err)reject(err)})})
}
export function addOrReviseData(url: any, params: any, showTips: any, hideLoads: any) {return new Promise((resolve, reject) => {if (!hideLoads)showLoading()axios.post(url, params).then(res => {hideLoading()switch (res.data.code) {case 401:jumpToLogin()breakcase 500:ElMessage.error(res.data.message)resolve(res.data)breakcase 200:if (showTips)ElMessage.success(res.data.message)resolve(res.data)breakdefault:resolve(res.data)break}}).catch(err => {errMsg(err)reject(err)})})
}
export function logIn(url: any, params: any) {return new Promise((resolve, reject) => {showLoading()axios.post(url, params).then(res => {switch (res.data.code) {case 500:ElMessage.error(res.data.message)breakcase 200:ElMessage.success(res.data.message)resolve(res.data)break}}).catch(err => {errMsg(err)reject(err)})})
}
export function logOut(url: any, params: any) {return new Promise((resolve, reject) => {axios.get(url, { params: params }).then(res => {ElMessage.success(res.data.message)jumpToLogin(true)}).catch(err => {jumpToLogin(true)})})
}
function jumpToLogin(showTips) {router.push({ path: '/login' })
}
app.ts
import { getOneOrAllData, addOrReviseData, logIn, logOut} from './http'
function GlobalUrl() {return '/globalApi'
}export const login = (p: any) => logIn(GlobalUrl() + '/login', p, false)
export const logout = (p: any) => logOut(GlobalUrl() + '/logout', p, false)
export const addOrUpdate = (p: any) => addOrReviseData(GlobalUrl() + '/addOrUpdate', p, true)
export const getList = (p: any) => getOneOrAllData(GlobalUrl() + '/getList', p, false)
vue文件
import { login } from "@/app"
login(){login(form).then((res: any) => {console.log(res)}
}