uniapp 微信小程序axios库的封装及使用

这篇具有很好参考价值的文章主要介绍了uniapp 微信小程序axios库的封装及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方式一

第一步:安装axios及适配器

安装依赖

需要注意使用uniapp-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这个依赖主要是适配小程序网络请求的适配器,为了解决uniapp 适配axios请求,避免报adapter is not a function错误

第二步:axios二次封装

在utils文件下新建request.js文件

// axios二次封装
// yarn add axios-adapter-uniapp import axiosAdapterUniapp from 'axios-adapter-uniapp'
import { getToken } from "@/utils/auth";
import axios from "axios";
// 小程序axios适配器
import mpAdapter from "axios-miniprogram-adapter";
axios.defaults.adapter = mpAdapter;
import { toast, showConfirm, tansParams } from "@/utils/common";

//根据环境变量获取api地址
let baseURL = process.env.config[process.env.UNI_SCRIPT].VITE_BASE_API;
// let evnName = process.env.config[process.env.UNI_SCRIPT] 获取当前处于哪个开发环境
console.log("baseURL:", baseURL, "++++++++++++++++++++++++");

class HttpRequest {
  constructor() {
    this.baseURL = baseURL; // 从环境变量中获取api地址
    this.timeout = 300000;
  }
  mergeOptions(options) {
    return {
      baseURL,
      timeout: 300000,
      ...options,
    };
  }
  request(options) {
    const instance = axios.create();
    this.setInterceptors(instance);
    const opts = this.mergeOptions(options);
    return instance(opts);
  }
  get(url, data = {}, outHeaders = {}) {
    // console.log(data, "data+++++++++++++");

    return this.request({
      dataType: "json",
      method: "get",
      url,
      params: { ...data }, // get参数可以直接展开
      headers: {},
    });
  }
  post(url, data = {}, outHeaders = {}) {
    // 请求体中 {}
    return this.request({
      method: "post",
      url,
      data, // post要求必须传入data属性
      headers: {},
    });
  }

  // 设置拦截器
  setInterceptors(instance) {
    // 请求拦截器
    instance.interceptors.request.use((config) => {
      const noLoading = config.headers["NO-LOADING"];
      // 是否需要设置 token
      const isToken = config.headers["ISTOKEN"] || false;
      if (getToken() && isToken) {
        config.header["Authorization"] = `Bearer ${getToken()}`;
      }
      if (!noLoading) {
        uni.showLoading({
          title: "加载中...",
        });
      }
      config.headers = {
        ...config.headers,
      };
      //console.log('config',config)
      return config;
    });
    // 响应拦截器
    instance.interceptors.response.use(
      (res) => {
        const noLoading = res.config.headers["NO-LOADING"];
        if (!noLoading) {
          uni.hideLoading();
        }
        let { data } = res;
        // console.log("请求获取data", data)
        if (data) {
          if (data.code === 200) {
            //console.log('data=============', data)
            return Promise.resolve(data);
          } else {
            showConfirm({
              content: data.msg,
              showCancel: false,
            }).then((res) => {
              /*               if (res.confirm) {
                store.dispatch("LogOut").then((res) => {
                  uni.reLaunch({ url: "/pages/login" });
                });
              } */
            });
            return Promise.resolve(data);
          }
        }
      },
      (err) => {
        console.log("axios报错", err);
        uni.hideLoading();
        return Promise.reject(err);
      }
    );
  }
}

export default new HttpRequest();

方式二

在request.js文件中做axios适配,不需要安装axios-miniprogram-adapter适配插件

// axios二次封装
import { getToken } from "@/utils/auth";
import { toast, showConfirm, tansParams } from "@/utils/common";
//映入axios相关
import axios from "axios";
import settle from "axios/lib/core/settle";
import buildURL from "axios/lib/helpers/buildURL";
import buildFullPath from "axios/lib/core/buildFullPath"; //解决axios0.19.0以上版本无法请求问题

//根据环境变量获取api地址
let baseURL = process.env.config[process.env.UNI_SCRIPT].VITE_BASE_API;
// let evnName = process.env.config[process.env.UNI_SCRIPT] 获取当前处于哪个开发环境
console.log("baseURL:", baseURL, "++++++++++++++++++++++++");

//解决uniapp 适配axios请求,避免报adapter is not a function错误
axios.defaults.adapter = function (config) {
  return new Promise((resolve, reject) => {
    const 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,
        };

        settle(resolve, reject, response);
      },
    });
  });
};

class HttpRequest {
  constructor() {
    this.baseURL = baseURL; // 从环境变量中获取api地址
    this.timeout = 300000;
  }
  // ...上面已贴出封装方式
}

export default new HttpRequest();

第三步: 创建接口配置js文件

在src目录下创建api文件夹,目录结构如下图

uniapp 微信小程序axios库的封装及使用 

config文件下login.js文件内容

export default {
  captchaImage: "/captchaImage"
}

 api文件下直接子级login.js文件内容

import axios from '@/utils/axios'
import login from './config/login'

// 获取验证码
export const captchaImageGet = () => axios.get(login.captchaImage)

第四步:调取接口

login.vue

<template>
	<view class="normal-login-container"> </view>
</template>

<script setup>
import { captchaImageGet } from '@/api/login'

// 获取图形验证码
function getCode() {
	captchaImageGet().then((res) => {
		console.log(res, 'res')
	})
}

//或者

const getCode = async () => {
	let res = await captchaImageGet()
	console.log(res, 'res')
}

getCode()
</script>

<style lang="scss">
</style>

 文章来源地址https://www.toymoban.com/news/detail-504008.html

到了这里,关于uniapp 微信小程序axios库的封装及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp实现微信小程序隐私协议组件封装

    uniapp实现微信小程序隐私协议组件封装。 隐私协议封装组件后快速调用。 diy-privacy/diy-privacy

    2024年02月07日
    浏览(45)
  • uniapp 微信小程序请求拦截器 接口封装

    前言: 请求拦截器可以在我们需要传递请求头的时候使用,例如:token 也会在当token发生变化的时候给予响应,所以我们做好对应的判断即可 1.首先在根目录创建common文件夹, 在里面创建request.js文件并加入以下代码: 2,在common文件夹下接着新建一个example.js文件来当作接口

    2024年01月23日
    浏览(49)
  • 【uniapp】中 微信小程序实现echarts图表组件的封装

     插件地址:echarts-for-uniapp - DCloud 插件市场 图例: 一、uniapp 安装   二、文件夹操作 将 node_modules 下的 uniapp-echarts 文件夹复制到 components 文件夹下  当前不操作此步骤的话,运行 - 运行到小程序模拟器 - 微信开发者工具 时,echarts图表显示不出来 原因:运行到小程序打包过

    2024年02月12日
    浏览(50)
  • uniapp 微信小程序 封装公共的请求js(api版本)

    一、新建api文件夹 在项目目录下创建api文件夹,内放files跟index.js文件夹,files文件夹内放每个页面对应的js请求接口 1、index.js 2、例如:login.js 二、config.js 三、main.js 四、页面使用

    2024年02月14日
    浏览(48)
  • uniapp及微信小程序封装全局网络请求,弹框和hint提示

    今天分享一下uniapp项目的网络请求如何封装,不知道大家开发微信小程序项目是用什么开发工具,我个人更喜欢用uniapp,无论是从项目扩展方向还是开发效率来说,uniapp都是首选。 1:创建一个项目工具库,http.js 在vite.config.js文件中配置跨域 这样,一个全局网络请求工具就完

    2024年02月06日
    浏览(43)
  • uniapp微信小程序封装网络请求 @escook/request-miniprogram

    官网地址:https://www.npmjs.com/package/@escook/request-miniprogram 1、下载依赖 2、引入 把下面代码放到 main.js 3、发起请求 4、请求成功 可以看到请求成功了,并执行了登入成功的逻辑。 每次发起请求后,都要自己写if语句判断请求是否成功,非常麻烦。我们可以修改一下源码解决这个

    2024年02月10日
    浏览(48)
  • uniapp:h5和微信小程序文件下载方式

    一、h5浏览器端下载方式,直接使用a标签 download属性指定下载文件的文件名,也可以不加 注意:记得一定要加ifdef注释,不然其他端也会显示a标签 二、微信小程序下载方式,通过uniapp的downloadFile和wx小程序的saveFile保存文件 wx保存文件的api只是临时保存图片文件,可以通过微

    2024年02月07日
    浏览(113)
  • uniapp的打包:h5、微信小程序以及APP方式

    本人用的是HBuilder编译器,学习uniapp时b站某位大大推荐的,我刚开始接触代码时候也用过,那时候并不好用这个编译器,但是现在试了一下挺好用的。 这是h5页面的打包配置,新版本的HBuilder用的是web配置(也就是h5配置的意思) 由于上图是我个人项目练习,没有用到appID,所

    2024年02月09日
    浏览(66)
  • 使用 Moment.js 日期处理库的微信小程序

    在微信小程序开发中,日期和时间的处理是一个常见的需求。Moment.js 是一个强大的日期处理库,它提供了许多方便的功能和方法,可以帮助我们在小程序中轻松地处理日期和时间。本文将介绍如何在微信小程序中引入和使用 Moment.js。 下载 Moment.js 首先,我们需要下载 Moment

    2024年02月22日
    浏览(43)
  • uniapp微信小程序获取用户名和头像最新方式(头像填写)

    getUserProfile 接口、getUserInfo 接口在最新的小程序基础库 已经不能获取到用户信息 官方推荐用头像填写能力 实现了一版 代码如下 做个记录 方便下次找到

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包