request.ts
import axios, {AxiosInstance, AxiosError, AxiosResponse, AxiosRequestConfig} from 'axios';
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';
interface ServerData<T = any> {
code: number;
data?: T;
success?: boolean;
msg?: string;
total?:number;
start?:number;
size?:number;
pages?:number;
navigatePages?:number;
hasPrevious?:boolean;
hasNext?:boolean;
}
const service:AxiosInstance = axios.create({
baseURL:'http://localhost:8092/test',
timeout: 5000,
headers:{
"Content-Type": "application/json; charset=UTF-8",
"Access-Control-Allow-Origin": "*"
},
});
declare module 'axios' {
export interface AxiosResponse<T = any> extends ServerData<T> {}
}
service.interceptors.request.use(
(config: AxiosRequestConfig) => {
if(config.headers){
var token = localStorage.getItem("token")
if(token){
config.headers["token"] = token
}
}
return config;
},
(error: AxiosError) => {
console.log(error);
return Promise.reject();
}
);
service.interceptors.response.use(
(response) => {
//此处的success是成功请求到后端接口,并不是请求数据成功了
if (response.status && response.status == 200) {
// 返回后台响应的数据
console.log("=======返回后台响应的数据======");
console.log(response);
switch(response.data.code){
case 200:
return response.data;
case 401:
ElMessage.error({ message: response.data.msg });
useRouter().push({ name: 'Login' })
return Promise.reject(response.data.msg);
default:
ElMessage.error({ message: response.data.msg });
return Promise.reject(response.data.msg);
}
}else{
ElMessage.error({ message: "请求出错!" });
return Promise.reject("请求出错!");
}
},
(error) => {
console.log("返回error")
const msg = error.response.data
console.log(msg)
ElMessage.error(msg)
return Promise.reject(error.response)
}
)
export default service;
index.ts
import request from '../utils/request';
export const getUserList = (params:any) => {
return request({
url: '/api/account/getAccountList',
method: 'get',
params:params
})
}
页面中使用,只选取了相关代码
<template>
<div>
...
</div>
</template>
<script setup lang="ts" name="userList">
import { getUserList } from '../../api/index';
// 获取表格数据
const getData = () => {
getUserList({
pageNum:query.pageNum,
pageSize:query.pageSize
}).then(res => {
console.log("userlist:")
console.log(res)
tableData.value = res.data;
pageTotal.value = res.total || 10;
});
};
getData();
</script>
<style scoped>
...
</style>
参考了Axios interceptor 修改了 response 之后的类型推导-慕课网