在使用uniapp开发时,由于习惯使用axios做网络请求框架,所以在uniapp开发时也想使用axios。但实际使用时并没有那么简单。
首先安装axios
npm install axios
请求时报 adapter is not a function 错误
网上有解决方案,在配置axios请求的地方引入一段代码就行
//真机获取 解决app上adapter is not a function问题
axios.defaults.adapter = function(config) {
return new Promise((resolve, reject) => {
var settle = require('axios/lib/core/settle');
var buildURL = require('axios/lib/helpers/buildURL');
uni.request({
method: config.method.toUpperCase(),
url: buildURL(config.url, config.params, config.paramsSerializer),
header: config.headers,
data: config.data,
dataType: config.dataType,
responseType: config.responseType,
sslVerify: config.sslVerify,
complete: function complete(response) {
response = {
data: response.data,
status: response.statusCode,
errMsg: response.errMsg,
header: response.header,
config: config
};
settle(resolve, reject, response);
}
})
})
}
这样就可以请求了吗? 并不是那么绝对,只有axios 0.19.0可以请求成功,超过0.19.0还是无法请求。难道只能限制死0.19.0版本了吗?
不要担心,也有解决方案,原因是0.19.0版本之后的版本多了个buildFullPath 如果是之前的版本不需要buildFullPath,所以需要改一下adapter配置方案,代码如下
//真机获取 解决app上adapter is not a function问题
axios.defaults.adapter = function(config) {
return new Promise((resolve, reject) => {
var settle = require('axios/lib/core/settle');
var buildURL = require('axios/lib/helpers/buildURL');
var buildFullPath = require('axios/lib/core/buildFullPath');
let fullurl = buildFullPath(config.baseURL,config.url)
uni.request({
method: config.method.toUpperCase(),
url: buildURL(fullurl, config.params, config.paramsSerializer),
header: config.headers,
data: config.data,
dataType: config.dataType,
responseType: config.responseType,
sslVerify: config.sslVerify,
complete:function complete(response){
response = {
data: response.data,
status: response.statusCode,
errMsg: response.errMsg,
header: response.header,
config: config
};
settle(resolve, reject, response);
}
})
})
}
ok,到这里完美解决在uniapp中使用axios无法请求的问题。并且不限制axios版本。