- 当前 Bug 的表现(可附上截图)
服务器返回
回调中打印
是不是和我用axios有关系?
- 预期表现
- 复现路径
- 提供一个最简复现 Demo
···
import Q from 'q'
import axios from 'axios'
import env from '../env/env'
import store from '../store/index'
import base64 from './base64'
import {formatParam} from './index'
const config = {
// 请求方法同上
method: 'get', // default
/**
* 基础url前缀
*
* 还有一种情况是上传文件前面要加zuul
* env.getApiHost() + '/zuul/v1'
*
*/
baseURL: env.getApiHost() + '/v1',
/**
* 上传文件前面要加zuul
*
* axios.post('url', FormData, axios.defaults.uploadConfig)
*
*/
uploadConfig: {
baseURL: env.getApiHost() + '/zuul/v1'
},
withCredentials: true, // 可能会影响干货下载json获取不到
// 设置超时时间
timeout: 0,
// 状态码 处理 status >= 200 && status < 300; // default
validateStatus: function (status) {
return status >= 200 && status < 300
}
}
// 全局配置axios
for (let key in config) {
axios.defaults[key] = config[key]
}
let baseAuth = base64.btoa(`${env.auth.client_id}:${env.auth.client_secret}`)
axios.interceptors.request.use(function (request) {
// 如果是新的登录接口
if (request.url.endsWith('/oauth/token')) {
if (request.headers) {
request.headers.Authorization = baseAuth
} else {
request.headers = {
Authorization: baseAuth
}
}
} else {
let token = store.state.app.xaToken
if (token && (!request.params || request.params.send_token !== false)) {
if (request.headers) {
request.headers.Authorization = 'Bearer ' + store.getters.requestHeaders.access_token
} else {
request.headers = {
Authorization: 'Bearer ' + store.getters.requestHeaders.access_token
}
}
} else {
if (request.params) {
delete request.params.send_token
}
}
// 判断get参数是否为空 为空 不传这个字段
if (request.params) {
// 深拷贝 可能params可能是带__ob__属性的对象
request.params = JSON.parse(JSON.stringify(request.params))
for (let key in request.params) {
if (request.params[key] === '') {
delete request.params[key]
}
}
}
}
return request
})
axios.defaults.adapter = function (config) {
return new Promise((resolve, reject) => {
let data = config.data
let url = config.url
/**
* 是get请求 把params放到data中
*
* 不是get请求 判断有没有params参数 有的话加到url上面
*
*/
if (config.method.toUpperCase() === 'GET') {
data = config.params
} else {
if (config.params) {
url += `?${formatParam(config.params)}`
}
}
let dataParams = {}
if (data) {
dataParams.data = data
}
wx.request({
url: url,
header: config.headers,
method: config.method.toUpperCase(),
...dataParams,
success: function (res) {
let response = res
if (response.data && !response.data.data) {
response.data.data = '123'
delete response.data.data
}
console.log(response)
if (response.statusCode >= 200 && response.statusCode < 300) {
if (typeof response.data === 'object') {
resolve(response.data)
} else {
resolve({data: response.data})
}
} else if (response.statusCode >= 400 && response.statusCode < 500) {
reject(response.data)
} else {
reject({
reasons: [{
field: '',
message: '接口请求失败',
msg_id: 'error.0000'
}]
})
}
},
fail: function () {
reject({
reasons: [{
field: '',
message: '接口请求失败',
msg_id: 'error.0000'
}]
})
}
})
})
}
```
找到问题了 应该是axios.adapter之后又做了一些操作把data属性加进去了
···
···
麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
https://developers.weixin.qq.com/s/BkJnGImd7N8h已生成分享代码 主要看axiosConfig里的内容 我把发送的对象里的data属性不传,返回的数据也没有data属性了。但是实际项目不能这么做