Axios 不支持自动转换字段命名风格,需通过请求/响应拦截器配合递归键名转换函数实现:响应拦截器将下划线转驼峰(如 user_name → userName),请求拦截器将驼峰转下划线(如 firstName → first_name),并注意类型判断、深度递归及边界兼容。
Axios 本身不内置驼峰(camelCase)与下划线(snake_case)字段名的自动转换能力,但可以通过拦截器 + 自定义转换函数,在请求发出前和响应返回后统一处理字段命名风格。Vue 项目中实现「响应数据自动转驼峰」或「请求数据自动转下划线」,关键在于拦截器 + 递归键名转换逻辑,而非 Axios 默认行为。
后端常返回 user_name、created_at 这类下划线命名字段,前端更习惯用 userName、createdAt。可在响应拦截器中统一转换:
response.interceptors 中,对 response.data 执行递归驼峰化/_(w)/g 替换下划线+字母为大写字母,再递归处理对象/数组所有键const toCamelCase = str => str.replace(/_(w)/g, (_, p1) => p1.toUpperCase());
const keysToCamelCase = obj => { ... };
若后端要求接收 first_name 而非 firstName,可在请求发送前将请求体(data)的键名转为下划线:
config.method !== 'get' 的请求生效(GET 参数一般走 params,也需单独转换)config.headers['Content-Type'] 是否含 json,再决定是否序列化转换config.data(如 POST body)调用下划线转换函数;对 config.params 同样处理在 src/utils/request.ts 中创建实例:
axios.create() 创建实例,设置 baseURL、timeout 等基础项config.data 和 config.params 类型,调用 keysToSnakeCase()
response.data 调用 keysToCamelCase(),并 return response.data(便于组件直接解构)这类转换看似简单,但容易踩坑:
data.data.list[0].extra_info),必须深度递归,不能只处理第一层api_v2_token),正则需兼容,建议用更健壮的转换逻辑HelloKittyMyDreamStore新手开局攻略HelloKittyMyDreamStore零基础入门玩法指南
暗黑不朽秘境暗黑不朽秘境手游高效刷级与快速升级实战指南
超维进化手游荒野游侠怎么玩|荒野游侠角色培养、副本攻略与实战技巧详细说明
铸兵之王最强装备排行榜一览铸兵之王全流派毕业装备推荐
小米路由4a千兆版500兆怎么设置(小米路由4a千兆版500兆设置方法)
宗师之上心法选择攻略宗师之上最强心法搭配与进阶实用技巧