【FAQ】uni-app:uni-app + axios 报Adapter Exception

问题原因

uni-app拦截了所有非uni.request发送的请求

解决方案

上文说到uni-app拦截了所有非uni.request发送的请求,所以下面需要将axios转发使用uni.request发送网络请求,步骤如下

  1. AxiosAxiosRequestConfig配置类中有一个adapter的配置属性,他的作用就是让用户何以自定义请求策略,AxiosRequestConfig属性如下:
export interface AxiosRequestConfig<D = any> {
  ...
  timeout?: Milliseconds;
  timeoutErrorMessage?: string;
  withCredentials?: boolean;
  adapter?: AxiosAdapterConfig | AxiosAdapterConfig[];
  auth?: AxiosBasicCredentials;
  responseType?: ResponseType;
  responseEncoding?: responseEncoding | string;
 ...
}

上文可以看到存在一个adapter的属性,接下来,开始配置它,代码附上

import axios from "axios";
import type { AxiosResponse } from 'axios'

const _axios = axios.create({
    timeout: 60000
});

_axios.interceptors.request.use((config) => {
    config.url = config.baseURL + config.url;
    return config;
})

_axios.interceptors.response.use((response) => {
    return {
        data: response.data,
        status: response.statusCode,
        message: response.statusText
    }
})

_axios.defaults.adapter = (config) => {
    return new Promise<AxiosResponse<string | AnyObject | ArrayBuffer>>((resolve, reject) => {
    	//这里使用uni-app的请求方法发送请求
        uni.request({
            method: (config.method || 'GET').toUpperCase(),
            url: config.url,
            header: config.headers,
            data: config.data || config.params,
            dataType: config.responseType,
            responseType: config.responseType,
            sslVerify: config.withCredentials,
            success: (res) => {
                resolve({
                    data: res.data.data || null,
                    status: res.statusCode,
                    statusText: res.data.message || "",
                    headers: res.header,
                    config: config
                })
            },
            fail: (error) => {
                reject(error)
            }
        })
    })
}

export function useApi() {
    return _axios;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Space Chars

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值