【uni-app】axios 报错:Error: Adapter ‘http‘ is not available in the build
在 uni-app 中使用 axios 会报错:Error: Adapter ‘http‘ is not available in the build
解决方法:为 axios 添加 adapter 适配器。
import axios from 'axios';
import settle from '../../node_modules/axios/lib/core/settle';
import buildURL from '../../node_modules/axios/lib/helpers/buildURL';// 设置基础URL
axios.defaults.baseURL = 'http://localhost:3000';// 解决 uniapp 适配axios请求,避免报adapter is not a function错误
axios.defaults.adapter = function (config) {const { method } = config;return new Promise((resolve, reject) => {uni.request({url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),method: method?.toUpperCase(),header: { ...config.headers },data: config.data,responseType: config.responseType,complete: function complete(response) {const { data, statusCode, errMsg, header } = response;const responseInfo = {data,status: statusCode,errMsg,header,config: config,};settle(resolve, reject, responseInfo);},});});
};// 请求拦截器
axios.interceptors.request.use(config => {const token = uni.getStorageSync('token');if (token) {config.headers['Authorization'] = `Bearer ${token}`;}return config;},error => {return Promise.reject(error);}
);// 响应拦截器
axios.interceptors.response.use(response => {return response;},error => {// 处理401错误(未授权)if (error.response && error.response.status === 401) {uni.removeStorageSync('token');uni.removeStorageSync('user');uni.showToast({title: '登录已过期,请重新登录',icon: 'none'});window.location.href = '/login';}return Promise.reject(error);}
);// 认证相关API
export const authAPI = {register: (userData) => axios.post('/api/auth/register', userData), // 已使用login: (credentials) => axios.post('/api/auth/login', credentials), // 已使用getCurrentUser: (object) => axios.post('/api/auth/me', object), // 已使用updateProfile: (profileData) => axios.put('/api/auth/profile', profileData)
};