在react 中 结合antd ts语法封装axios请求

mac2025-02-10  13

封装axios请求

HttpClients.ts 文件

import axios from 'axios' import { loadProgressBar } from 'axios-progress-bar' import 'axios-progress-bar/dist/nprogress.css' import * as Login from '@utils/Login' import { message } from 'antd' // 自定义判断元素类型JS function toType(obj) { return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase() } // 参数过滤函数 function filterNull(o) { Object.keys(o).map(key => { if (o[key] === null) { delete o[key] } if (toType(o[key]) === 'string') { o[key] = o[key].trim() } else if (toType(o[key]) === 'object') { o[key] = filterNull(o[key]) } else if (toType(o[key]) === 'array') { o[key] = filterNull(o[key]) } }) return o } /** * * * @param {String} method Ajax请求类型 'POST'|'PUT'|'GET'|'DELETE' * @param {String} url 请求地址 * @param {Object} params 参数 * @returns Promise<T> */ function apiAxios(method, url, params) { if (params) { params = filterNull(params) } return new Promise((resolve, reject) => { if (!Login.default.GetLoginState()) { } loadProgressBar() axios.defaults.headers.common.Authorization = localStorage.getItem('accessToken') axios({ method, url, data: method === 'POST' || method === 'PUT' ? params : null, params: method === 'GET' || method === 'DELETE' || method === 'PATCH' ? params : null, withCredentials: false }) .then((res) => { if (res.data.msg === 'Token已过期') { message.error('Token已过期') window.location.href = '/#/login' } if (res.status === 200) { resolve(res) } else { reject('Axios返回状态不对,查看请求处理过程....') } }, err => { reject(err) const errCode = err.response.status const msg = err.response.message if (msg === 'Token已过期') { message.error('身份过期,请重新登录') window.location.href = '#/login' } switch (errCode) { case 400: console.log('错误请求') break case 401: // 权限处理 重新登录 清空token message.error('请检查用户名和密码') window.location.href = '#/login' break case 403: message.error('身份过期请重新登录', 3) window.location.href = '#/login' break case 404: message.error('请求错误,未找到该资源') console.log('请求错误,未找到该资源') break case 405: console.log('请求方法未允许') break case 408: console.log('请求超时') break case 500: message.error('服务器端出错') console.log('服务器端出错') break case 501: console.log('网络未实现') break case 502: console.log('网络错误') break case 503: console.log('服务不可用') break case 504: console.log('网络超时') break default: message.error('未知错误') } }) .catch((err) => { const errInfo = { 'err': err.response } reject(errInfo) }) }) } export default { get: (url, params) => { return apiAxios('GET', url, params) }, post: (url, params) => { return apiAxios('POST', url, params) }, put: (url, params) => { return apiAxios('PUT', url, params) }, delete: (url, params) => { return apiAxios('DELETE', url, params) }, patch: (url, params) => { return apiAxios('PATCH', url, params) } }

定义api文件

import HttpClient from './HttpClient' export function GetData(param) { return HttpClient.get(`/api/getData`, {param}) } export default { GetData }

在组件中使用

import { GetData } from './api.ts' getDaTA = () => { const param = {} GetData(param).then((res: any) => { console.log(res) }) }

打个样,欢迎指错

最新回复(0)