当前位置: 首页 > news >正文

2024 axios封装 包括请求拦截、错误码等

1.新建 codeMessage.ts

export default {200: "服务器成功返回请求的数据。",201: "新建或修改数据成功。",202: "一个请求已经进入后台排队(异步任务)。",204: "删除数据成功。",400: "发出的请求有错误,服务器没有进行新建或修改数据的操作。",401: "登录信息已失效,请重新登录。",403: "用户得到授权,但是访问是被禁止的。",404: "发出的请求针对的是不存在的记录,服务器没有进行操作。",405: "请求方法不被允许。",406: "请求的格式不可得。",410: "请求的资源被永久删除,且不会再得到的。",422: "当创建一个对象时,发生一个验证错误。",500: "服务器发生错误,请检查服务器。",502: "网关错误。",503: "服务不可用,服务器暂时过载或维护。",504: "网关超时。",
};

2.新建axios.ts

import axios from "axios";
import { Toast } from "antd-mobile";//三方库,可引入别的
import codeMessage from "./codeMessage";
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
const service = axios.create({baseURL: "/api",timeout: 100000,responseType: "json",headers: { "content-type": "application/json" },
});
/** 设置请求拦截 **/
service.interceptors.request.use((config) => {config.cancelToken = source.token; // 全局添加cancelToken(config as any).headers["Authorization"] = localStorage.getItem("token");return config;},(err) => {return Promise.reject(err);}
);
/** 设置响应拦截 **/
service.interceptors.response.use((response: any): any => {if (response && response?.status) {const { status, data } = response;if (status != 200) {const errorText = codeMessage[response.status] || response.statusText;Toast.show({content: errorText,});return response;}if (data?.code != 200) {Toast.show({content: data?.msg,});}return response;}},(error: any) => {if (axios.isCancel(error)) {// 取消请求的情况下,终端Promise调用链return new Promise(() => {});} else {return Promise.reject(error);}}
);
export default service;

3.新建request.ts

import service from "./axios";
// 方法映射
const methodEnum: Record<"get" | "post" | "upload" | "put",(url: string, params: any) => void
> = {get: (url: string, params = {}) => {return new Promise((resolve, reject) => {service.get(url, { params }).then((res) => {resolve(res.data);}).catch((err) => {reject(err);});});},post: (url: string, data = {}) => {return new Promise((resolve, reject) => {service.post(url, data, {headers: {"Content-Type": "application/json",},}).then((res) => {resolve(res.data);},(err) => {reject(err);});});},put: (url: string, data = {}) => {return new Promise((resolve, reject) => {service.put(url, data, {headers: {"Content-Type": "application/json",},}).then((res) => {resolve(res.data);},(err) => {reject(err);});});},upload: (url: string, files: any) => {return new Promise((resolve, reject) => {const config = {headers: { "Content-Type": "multipart/form-data" },};let data = new FormData();for (const key in files) {if (Object.prototype.hasOwnProperty.call(files, key)) {data.append(key, files[key]);}}data.append("file", files);return service.post(url, data, config).then((res) => {resolve(res);},(err) => {reject(err);});});},
};
type Method =| "get"| "post"| "upload"| "GET"| "POST"| "UPLOAD"| "put"| "PUT";
type RequsetData<T> = {method: Method;params: T;
};
// 请求方法
const requset = (url: string, requsetData: RequsetData<any>): any => {const { method, params } = requsetData;return methodEnum[method.toLocaleLowerCase() as Method](url, params);
};
export default requset;

4.使用方法

import requset from "./request";
// 获取详情
export const detail = (id: string
) => {return request(`/detail/${id}`, {method: "GET",params: {},});
}
type LoginParams = {phone: string;password: String;code: string;
}
// 登录
export const login = (params: LoginParams
) => {return request(`/login`, {method: "POST",params});
}
http://www.lryc.cn/news/288787.html

相关文章:

  • Kotlin Multiplatform项目推荐 | 太空人分布图
  • 使用Opencv-python库读取图像、本地视频和摄像头实时数据
  • webpack如何把dist.js中某个模块js打包成一个全局变量,使得在html引入dist.js后可以直接访问
  • Mysql第一天
  • 用C语言实现贪吃蛇游戏!!!(破万字)
  • uniapp 使用echarts做折线图条形图。
  • 美易平台:诺基亚四季度财报超预期
  • 大数据学习之Flink算子、了解(Source)源算子(基础篇二)
  • 抖去推短视频矩阵系统+实景无人直播系统技术源头开发
  • 【机器学习】一文读懂统计学与机器学习的区别。
  • 燃烧的指针(二)
  • 【工具使用-Everything】everything只能搜到文件夹,无法搜到文件
  • 手写rpc和redis
  • Unity动画桢事件
  • 搭建Redis集群
  • C语言sizeof 不是函数吗?
  • Mybatis的XML配置
  • Oracle报错:ORA-08002: sequence CURRVAL is not yet defined in this session
  • python10-Python的字符串之拼接字符串
  • 华为三层交换机之基本操作
  • IntelliJ IDEA 快捷键大全
  • scrapy的概念作用和工作流程
  • 首页热卖推荐商品显示axios异步请求数据动态渲染实现
  • 【C++11并发】mutex 笔记
  • 洛谷 P5635 【CSGRound1】天下第一
  • 如何通过Navicat远程访问宝塔面板安装的MySQL数据库
  • 【硅谷甄选】导航守卫(进度条,网页标题,路由鉴权)
  • OpenHarmony—TypeScript到ArkTS约束说明
  • 蓝桥杯——每日一练(简单题)
  • css设置不可点击