request请求工具类,处理了Axios interceptor 修改response 之后的类型推导问题

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 之后的类型推导-慕课网 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值