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

vben-admin 2.8.0 版本修改 axios响应处理逻辑

此前端框架下的 Axios 在后端返回的结果老是无法正常解析,找到他源码的封装类,修正这个问题

文件位于 src\utils\http\axios\index.ts

修改前

  transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) => {const { t } = useI18n()const { isTransformResponse, isReturnNativeResponse } = options// 是否返回原生响应头 比如:需要获取响应头时使用该属性if (isReturnNativeResponse) {return res}// 不进行任何处理,直接返回// 用于页面代码可能需要直接获取code,data,message这些信息时开启if (!isTransformResponse) {return res.data}// 错误的时候返回const { data } = resif (!data) {// return '[HTTP] Request has no return value';throw new Error(t('sys.api.apiRequestFailed'))}//  这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式const { code, result, message } = data// 这里逻辑可以根据项目进行修改const hasSuccess = data && Reflect.has(data, 'code') && code === ResultEnum.SUCCESSif (hasSuccess) {return result}// 在此处根据自己项目的实际情况对不同的code执行不同的操作// 如果不希望中断当前请求,请return数据,否则直接抛出异常即可let timeoutMsg = ''switch (code) {case ResultEnum.TIMEOUT:timeoutMsg = t('sys.api.timeoutMessage')const userStore = useUserStoreWithOut()userStore.setToken(undefined)userStore.logout(true)breakdefault:if (message) {timeoutMsg = message}}// errorMessageMode=‘modal’的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误// errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示if (options.errorMessageMode === 'modal') {createErrorModal({ title: t('sys.api.errorTip'), content: timeoutMsg })} else if (options.errorMessageMode === 'message') {createMessage.error(timeoutMsg)}throw new Error(timeoutMsg || t('sys.api.apiRequestFailed'))},

重点是这几行的解析有问题, Res 无法直接解构到 data

    const { data } = resif (!data) {// return '[HTTP] Request has no return value';throw new Error(t('sys.api.apiRequestFailed'))}//  这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式const { code, result, message } = data// 这里逻辑可以根据项目进行修改const hasSuccess = data && Reflect.has(data, 'code') && code === ResultEnum.SUCCESSif (hasSuccess) {return result}

修改后

  transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) => {const { t } = useI18n()const { isTransformResponse, isReturnNativeResponse } = options// 是否返回原生响应头 比如:需要获取响应头时使用该属性if (isReturnNativeResponse) {return res}// 不进行任何处理,直接返回// 用于页面代码可能需要直接获取code,data,message这些信息时开启if (!isTransformResponse) {return res.data}// 错误的时候返回const content = res.data;if (!content) {// return '[HTTP] Request has no return value';throw new Error(t('sys.api.apiRequestFailed'))}//  这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式const { code, data, message } = content// 这里逻辑可以根据项目进行修改const hasSuccess = content && Reflect.has(content, 'code') && code === ResultEnum.SUCCESSif (hasSuccess) {return data}// 在此处根据自己项目的实际情况对不同的code执行不同的操作// 如果不希望中断当前请求,请return数据,否则直接抛出异常即可let timeoutMsg = ''switch (code) {case ResultEnum.TIMEOUT:timeoutMsg = t('sys.api.timeoutMessage')const userStore = useUserStoreWithOut()userStore.setToken(undefined)userStore.logout(true)breakdefault:if (message) {timeoutMsg = message}}// errorMessageMode=‘modal’的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误// errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示if (options.errorMessageMode === 'modal') {createErrorModal({ title: t('sys.api.errorTip'), content: timeoutMsg })} else if (options.errorMessageMode === 'message') {createMessage.error(timeoutMsg)}throw new Error(timeoutMsg || t('sys.api.apiRequestFailed'))},

http://www.xdnf.cn/news/695395.html

相关文章:

  • MySQL:零基础入门(狂神版)
  • PyTorch安装Cuda版本选择
  • WMS系统选型与实施避坑手册
  • HarmonyOS 5 应用开发导读:从入门到实践
  • C++STL——map与set的使用
  • “顶点着色器”和“片元着色器”是先处理完所有顶点再统一进入片元阶段,还是一个顶点处理完就去跑它的片元?
  • 上传头像upload的简易方法,转base64调接口的
  • Spring AI 系列之使用 Spring AI 开发模型上下文协议(MCP)
  • maven编译时跳过test过程
  • MYSQL备份恢复知识:第六章:恢复原理
  • pythonocc hlr实例 deepwiki 显示隐藏线
  • Linux 系统入门篇四
  • SPEAR开源程序是用于逼真演示 AI 研究的模拟器
  • 【STM32】按键控制LED 光敏传感器控制蜂鸣器
  • HTTPS加密通信详解及在Spring Boot中的实现
  • 网盘解析工具v1.3.6,增加文件夹解析下载
  • 工业级安卓触控一体机在激光机械中的应用分析
  • 异步上传石墨文件进度条前端展示记录(采用Redis中String数据结构实现)
  • 杆塔倾斜在线监测装置:电力设施安全运行的“数字守卫”
  • Shell - ​​Here Document(HereDoc)
  • 今日行情明日机会——20250528
  • NC37 合并区间【牛客网】
  • 设计模式-依赖倒转原则
  • 微服务FallbackFactory和FallbackClass
  • MCP Server的五种主流架构:从原理到实践的深度解析
  • DeepSeek 赋能智能物流:解锁仓储机器人调度的无限可能
  • 油烟净化器风道设计要点:如何降低风阻并提升净化效果
  • RPG14.装备武器与卸载武器
  • 压测的服务器和用户环境的区别
  • 网站服务器出现异常的原因是什么?