当前位置:   article > 正文

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

axios.interceptors.response

request.ts

  1. import axios, {AxiosInstance, AxiosError, AxiosResponse, AxiosRequestConfig} from 'axios';
  2. import { useRouter } from 'vue-router';
  3. import { ElMessage } from 'element-plus';
  4. interface ServerData<T = any> {
  5. code: number;
  6. data?: T;
  7. success?: boolean;
  8. msg?: string;
  9. total?:number;
  10. start?:number;
  11. size?:number;
  12. pages?:number;
  13. navigatePages?:number;
  14. hasPrevious?:boolean;
  15. hasNext?:boolean;
  16. }
  17. const service:AxiosInstance = axios.create({
  18. baseURL:'http://localhost:8092/test',
  19. timeout: 5000,
  20. headers:{
  21. "Content-Type": "application/json; charset=UTF-8",
  22. "Access-Control-Allow-Origin": "*"
  23. },
  24. });
  25. declare module 'axios' {
  26. export interface AxiosResponse<T = any> extends ServerData<T> {}
  27. }
  28. service.interceptors.request.use(
  29. (config: AxiosRequestConfig) => {
  30. if(config.headers){
  31. var token = localStorage.getItem("token")
  32. if(token){
  33. config.headers["token"] = token
  34. }
  35. }
  36. return config;
  37. },
  38. (error: AxiosError) => {
  39. console.log(error);
  40. return Promise.reject();
  41. }
  42. );
  43. service.interceptors.response.use(
  44. (response) => {
  45. //此处的success是成功请求到后端接口,并不是请求数据成功了
  46. if (response.status && response.status == 200) {
  47. // 返回后台响应的数据
  48. console.log("=======返回后台响应的数据======");
  49. console.log(response);
  50. switch(response.data.code){
  51. case 200:
  52. return response.data;
  53. case 401:
  54. ElMessage.error({ message: response.data.msg });
  55. useRouter().push({ name: 'Login' })
  56. return Promise.reject(response.data.msg);
  57. default:
  58. ElMessage.error({ message: response.data.msg });
  59. return Promise.reject(response.data.msg);
  60. }
  61. }else{
  62. ElMessage.error({ message: "请求出错!" });
  63. return Promise.reject("请求出错!");
  64. }
  65. },
  66. (error) => {
  67. console.log("返回error")
  68. const msg = error.response.data
  69. console.log(msg)
  70. ElMessage.error(msg)
  71. return Promise.reject(error.response)
  72. }
  73. )
  74. export default service;

index.ts

  1. import request from '../utils/request';
  2. export const getUserList = (params:any) => {
  3. return request({
  4. url: '/api/account/getAccountList',
  5. method: 'get',
  6. params:params
  7. })
  8. }

页面中使用,只选取了相关代码

  1. <template>
  2. <div>
  3. ...
  4. </div>
  5. </template>
  6. <script setup lang="ts" name="userList">
  7. import { getUserList } from '../../api/index';
  8. // 获取表格数据
  9. const getData = () => {
  10. getUserList({
  11. pageNum:query.pageNum,
  12. pageSize:query.pageSize
  13. }).then(res => {
  14. console.log("userlist:")
  15. console.log(res)
  16. tableData.value = res.data;
  17. pageTotal.value = res.total || 10;
  18. });
  19. };
  20. getData();
  21. </script>
  22. <style scoped>
  23. ...
  24. </style>

参考了Axios interceptor 修改了 response 之后的类型推导-慕课网 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/299736
推荐阅读
相关标签
  

闽ICP备14008679号