广告
返回顶部
首页 > 资讯 > 移动开发 >uniapp 微信小程序axios库的封装及使用
  • 594
分享到

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

微信小程序uni-app小程序前端vue.js 2023-09-03 12:09:27 594人浏览 八月长安
摘要

方式一 第一步:安装axiOS及适配器 安装依赖 需要注意使用uniapp-vue3版本时axios的版本需要0.26.0以下,建议锁版本 npm i axios@0.26.0 axios-miniprogram-adapter&&

方式一

第一步:安装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) => {                          });            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文件夹,目录结构如下图

 

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

 

来源地址:https://blog.csdn.net/weixin_43743175/article/details/129704892

--结束END--

本文标题: uniapp 微信小程序axios库的封装及使用

本文链接: https://www.lsjlt.com/news/392165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作