微信小程序与axios组成网络层封装过程详解

 更新时间:2023年02月09日 11:52:57   作者:程序不了猿  
小程序在网络层提供的API是能够完成一个程序与服务端交互的完整链路,但需要大量的定制化代码,才能实现请求拦截和响应拦截,不太符合大多数开发者的使用习惯,对于前端开发者来说,网络层还得是axios

背景

小程序在网络层提供的API是能够完成一个程序与服务端交互的完整链路,但需要大量的定制化代码,才能实现请求拦截和响应拦截,不太符合大多数开发者的使用习惯,对于前端开发者来说,网络层还得是axios。

本片主要讲一下小程序网络层使用axios的简要总结,这是一个最精简的一个demo,大家可以在这个基础上去扩充实践。

依赖

这边需要注意的是使用uni-vue3版本时axios的版本需要0.26.0以下,建议锁版本

npm i axios@0.26.0 axios-miniprogram-adapter
&&
yarn add axios@0.26.0 axios-miniprogram-adapter

axios-miniprogram-adapter这个依赖主要是适配小程序网络请求的适配器,这个适配器的原理大家感兴趣可以去了解一下,简单来说**,axios在发起网络请求时会先判断用户是否定义的适配器,如果定义了那就使用适配器发起网络请求,如果没有定义它会前判断环境,node环境使用http(与服务端一致),浏览器环境使用xhr(高版本可能用fetch,具体是否用大家可以看一下源码)。**所以可以得出一个优先级 adapter >http(node)或xhr(浏览器)。

最简demo

import axios, { AxiosRequestConfig } from 'axios';
import mpAdapter from 'axios-miniprogram-adapter'
import { globalConfig } from '../config';
// base_url
const baseURL = globalConfig.BASE_URL;
// @ts-ignore
// 适配器
axios.defaults.adapter = mpAdapter
// axios初始化实例
const axiosIns = axios.create({
  baseURL,
  timeout: 10000,
});
// request 请求拦截器,处理逻辑
axiosIns.interceptors.request.use(
  async (axiosConfig) => {
    const config = axiosConfig as any;
    config.headers = {
        contentType: 'application/json;charset=UTF-8',
      };
    return config;
  },
  (error) => {
    return Promise.reject(error);
  },
);
//  response拦截器
axiosIns.interceptors.response.use(
  (response) => {
    const responData = response.data;
    const { rtnFlag } = responData;
    // 判断业务是否成功
    if (rtnFlag !== '9999') {
      // 失败
      return Promise.reject(responData);
    }
    // 成功
    return Promise.resolve(responData);
  },
  (err) => {
    return Promise.reject(err);
  },
);
export default axiosIns

自定义适配器

如果不用axios-miniprogram-adapter这个依赖,大家也可以如下自定义适配器,这个在uni、微信、支付中可以通用,但注意uni-vue3版本中axios版本需要0.26.0锁死(这个是个人尝试的成功版本,有时间大家可以继续探索)

import axios, { AxiosRequestConfig } from 'axios';
import settle from 'axios/lib/core/settle';
import buildURL from 'axios/lib/helpers/buildURL';
// 自定义适配器适配uniapp语法
axios.defaults.adapter = function (config: any) {
  return new Promise((resolve, reject) => {
    uni.request({
      ...config,
      method: config.method.toUpperCase(),
      header:config.headers,
      url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),
      complete: (response: any) => {
        response = {
          ...response,
          config,
        };
        settle(resolve, reject, response);
      },
    });
  });
};

到此这篇关于微信小程序与axios组成网络层封装过程详解的文章就介绍到这了,更多相关小程序与axios网络层封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript图片打印方案实例详解

    JavaScript图片打印方案实例详解

    有时候我们希望文件上传的时候预览图片,下面这篇文章主要给大家介绍了关于JavaScript图片打印方案的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • JavaScript中的继承方式详解

    JavaScript中的继承方式详解

    这篇文章主要介绍了JavaScript中的继承方式详解,本文讲解了js继承的概念、原型式继承与类式继承、原型链继承、类式继承、组合继承、原型式继承等内容,需要的朋友可以参考下
    2015-02-02
  • JavaScript监听文本框回车事件并过滤文本框空格的方法

    JavaScript监听文本框回车事件并过滤文本框空格的方法

    这篇文章主要介绍了JavaScript监听文本框回车事件并过滤文本框空格的方法,涉及javascript操作文本框获取、清空及删除空格的技巧,需要的朋友可以参考下
    2015-04-04
  • js带点自动图片轮播幻灯片特效代码分享

    js带点自动图片轮播幻灯片特效代码分享

    这篇文章主要为大家详细介绍了js带点自动图片轮播幻灯片特效,图片轮播效果特别适合做产品展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • js实现表格数据搜索

    js实现表格数据搜索

    这篇文章主要为大家详细介绍了js实现表格数据搜索,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 小程序页面间传参的五种方式实例详解

    小程序页面间传参的五种方式实例详解

    页面跳转,页面之间传递参数在开发APP应用的时候会经常用到这样的功能,下面这篇文章主要给大家介绍了关于小程序页面间传参的五种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • JavaScript实现前端飞机大战小游戏

    JavaScript实现前端飞机大战小游戏

    这篇文章主要为大家详细介绍了JavaScript实现前端飞机大战小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 原生js实现日历效果

    原生js实现日历效果

    这篇文章主要为大家详细介绍了原生js实现日历效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • js 弹簧效果代码

    js 弹簧效果代码

    上次做图片滑动展示效果时做了减速效果,就想做一个加速效果。结合起来就想到了下面这个东西,当然只是类似弹簧,而不是真正的弹簧。
    2008-09-09
  • javascript+html5+css3自定义弹出窗口效果

    javascript+html5+css3自定义弹出窗口效果

    这篇文章主要为大家详细介绍了javascript+html5+css3自定义弹出窗口效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论