uniapp利用第三方包替代axios发起微信小程序网络请求

748 阅读2分钟

uniapp利用第三方包发送微信小程序网络请求

在UniApp中编写微信小程序时,直接使用axios库发起网络请求并不是最佳实践。微信小程序的环境与标准的Web环境存在一些差异,特别是在网络请求方面,微信小程序提供了自己的API,比如wx.request,用于发起HTTP请求。

​ 虽然理论上你可以尝试在微信小程序中使用axios,但会面临一些问题和限制,包括:

  1. axios的依赖环境:axios是基于Node.js和浏览器环境的,而微信小程序的运行环境不同于这两者,可能会导致axios的一些功能无法正常使用。
  2. 微信小程序的API限制:微信小程序对网络请求的API有一些特定的限制和优化,直接使用axios可能会忽略这些特性,从而导致兼容性问题。

​ 所以我们建议在uni-app项目中使用 @escook/request-miniprogram第三方包发起网络请求。

  1. 在项目根目录中,在终端先初始化一个package.json:
npm init -y
  1. 安装包

    npm install @escook/request-miniprogram
    
  2. 在项目的main.js入口文件中导入包

    // 导入包
    import request from '@escook/request-miniprogram';
    
    // 配置全局请求URL
    request.defaults.baseURL = 'https://example.com/api';
    
    // 配置请求拦截器
    request.interceptors.request.use(config => {
        // 在请求发送之前做一些处理
        config.header = {
            ...config.header,
            'Authorization': 'Bearer your-token' // 添加Token
        };
        return config;
    });
    
    // 配置响应拦截器
    request.interceptors.response.use(response => {
        // 在响应收到之后做一些处理
        if (response.data.status !== 200) {
            // 处理错误
            return Promise.reject(response.data.message);
        }
        return response.data;
    }, error => {
        // 处理响应错误
        return Promise.reject(error);
    });
    
    // 发起GET请求
    request.get('/path/to/resource', {
        params: {
            key: 'value'
        }
    }).then(response => {
        console.log(response);
    }).catch(error => {
        console.error(error);
    });
    
    // 发起POST请求
    request.post('/path/to/resource',
    
    

    总结:@escook/request-miniprogram 是一个非常方便的工具包,为微信小程序的网络请求提供了类似axios的功能。通过全局配置、拦截器和Promise接口,可以使代码更加简洁和易维护,适合在微信小程序中进行各种网络请求操作。