axios实现请求参数下划线转为驼峰,响应参数驼峰转为下划线
1.src下新建utils文件夹
2.utils文件夹下新建request.js文件(代表请求文件)和tools.js(代表工具文件)
3.request.js文件一定要在mais.js中引入
tools.js文件代码
function underline (s) {
return s.replace(/_(\w)/g, function (all, letter) {
return letter.toUpperCase()
})
}
function humpline (s) {
return s.replace(/([A-Z])/g, '_$1').toLowerCase()
}
function jsonNewline (obj) {
if (obj instanceof Array) {
obj.forEach(function (v) {
jsonNewline(v)
})
} else if (obj instanceof Object) {
Object.keys(obj).forEach(function (key) {
let newKey = underline(key)
if (newKey !== key) {
obj[newKey] = obj[key]
delete obj[key]
}
jsonNewline(obj[newKey])
})
}
}
function jsonline (obj) {
if (obj instanceof Array) {
obj.forEach(function (v) {
jsonline(v)
})
} else if (obj instanceof Object) {
Object.keys(obj).forEach(function (key) {
let newKey = humpline(key)
if (newKey !== key) {
obj[newKey] = obj[key]
delete obj[key]
}
jsonline(obj[newKey])
})
}
}
export default {
jsonNewDate: function (obj) {
jsonNewline(obj)
},
jsonNewLineData: function (obj) {
jsonline(obj)
},
}
request.js文件代码
import axios from "axios"
import tooles from './tools.js'
axios.defaults.timeout = 3000
axios.interceptors.request.use(request => {
if (request.params) { // get请求参数
let temdata = JSON.parse(JSON.stringify(request.params)) // 防止深拷贝跟浅拷贝
tooles.jsonNewDate(temdata)
request.params = temdata
} if(request.data){ // post请求参数
let temdata = JSON.parse(JSON.stringify(request.data)) // 防止深拷贝跟浅拷贝
tooles.jsonNewDate(temdata)
request.data = temdata
}
return request
}, (error) => {
return Promise.reject(error);
})
axios.interceptors.response.use(data => { // 该处为后端返回整个内容
if (data.config.url.includes('xxx')) {
tooles.jsonNewLineData(data.data)
return data.data['_c-_response-_body'] || []
}
return data
}),(error=>{
return Promise.reject(error);
})
export default {
get:axios.get,
post:axios.post,
put:axios.put,
delete:axios.delete
}