仿axios,封装微信小程序的请求

由于小程序中的请求不是非常好用,没有axios好用,所以按照axios封装了一个简易的请求工具。

axiosWechat.js文件

javascript 复制代码
class AxiosWechat {
  constructor(config = {}) {
    // 设置基础配置
    this.config = {
      baseUrl: '',       // 基础路径
      headers: {},       // 请求头
      ...config,         // 合并用户传入的配置
    };
    // 初始化请求和响应拦截器数组
    this.requestInterceptors = [];
    this.responseInterceptors = [];
  }

  // 添加请求拦截器
  beforeRequest(fulfilled, rejected) {
    this.requestInterceptors.push({ fulfilled, rejected });
  }

  // 添加响应拦截器
  afterRequest(fulfilled, rejected) {
    this.responseInterceptors.push({ fulfilled, rejected });
  }

  // 通用请求方法
  request(config) {
    // 合并默认配置和请求配置
    config = { ...this.config, ...config };
    // 合并请求头
    config.headers = { ...this.config.headers, ...config.headers };

    let chain = Promise.resolve(config);

    // 执行请求拦截器
    this.requestInterceptors.forEach((interceptor) => {
      chain = chain.then(interceptor.fulfilled, interceptor.rejected);
    });

    // 发起请求
    chain = chain.then((finalConfig) => this._sendRequest(finalConfig));

    // 执行响应拦截器
    this.responseInterceptors.forEach((interceptor) => {
      chain = chain.then(interceptor.fulfilled, interceptor.rejected);
    });

    return chain;
  }

  // GET 请求方法
  get(url, params = {}, config = {}) {
    return this.request({
      url,
      method: 'GET',
      params,         // GET 请求使用 params
      ...config,
    });
  }

  // POST 请求方法
  post(url, data = {}, config = {}) {
    return this.request({
      url,
      method: 'POST',
      data,           // POST 请求使用 data
      ...config,
    });
  }

  // PUT 请求方法
  put(url, data = {}, config = {}) {
    return this.request({
      url,
      method: 'PUT',
      data,           // PUT 请求使用 data
      ...config,
    });
  }

  // DELETE 请求方法
  delete(url, params = {}, config = {}) {
    return this.request({
      url,
      method: 'DELETE',
      params,         // DELETE 请求使用 params
      ...config,
    });
  }

  // 内部请求处理
  _sendRequest(config) {
    return new Promise((resolve, reject) => {
      const { baseUrl, url, method, data, params, headers } = config;

      let weixin = wx;
      if (typeof uni !== 'undefined') {
        weixin = uni;
      }

      // 发送请求
      weixin.request({
        url: baseUrl + url,
        method: method || 'GET',
        data: method === 'GET' || method === 'DELETE' ? params : data, // GET 和 DELETE 使用 params,其他使用 data
        header: headers,
        success: resolve,
        fail: reject,
      });
    });
  }
}

export default AxiosWechat;

初始化请求工具

index.js

javascript 复制代码
import axiosWechat from './axiosWechat.js'


const $http = new axiosWechat({
  baseUrl: 'https://xxxxxx',
  headers: { 'Content-Type': 'application/json;charset=UTF-8' },
});

// 请求拦截器
$http.beforeRequest((config) => {
    // 请求之前做需要做的
    return config;
  },
  (error) => {
    console.error('Request Interceptor Error:', error);
    return Promise.reject(error);
  }
);


// 响应拦截器
$http.afterRequest((response) => {
   	// 请求回来需要做的
	return response.data
  }
  },
  (error) => {
    console.error('Response Interceptor Error:', error);
    return Promise.reject(error);
  }
);


export default $http

文件中使用

javascript 复制代码
import axios from './index.js'
const base = "/api/ofa-admin"

export const login = (data) =>{
	// console.log(axios.post)
	return axios.post( `${base}/login`,  data, { headers: { ... } })
}

export const reqGetCodeImg = () =>{
	return axios.get( `${base}/open-api/captcha`)
}
相关推荐
说私域19 小时前
“开源AI智能名片链动2+1模式S2B2C商城小程序”在县级市场的应用与挑战分析
人工智能·小程序·开源
千寻技术帮20 小时前
50024_基于微信小程序的食品购商城
小程序·源码·项目·文档·ppt
说私域1 天前
定制开发AI智能名片S2B2C预约服务小程序的定制开发与优势分析
大数据·人工智能·小程序
云起SAAS1 天前
名字姓名起名打分评分抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·名字姓名起名打分评分
说私域1 天前
从裂变能力竞争到技术水平竞争:开源AI智能名片链动2+1模式S2B2C商城小程序对微商企业竞争格局的重塑
人工智能·小程序·开源
开发加微信:hedian1162 天前
短剧小程序开发全攻略:技术选型与实现思路
微信·小程序·架构·aigc·交互
2501_915918412 天前
移动端 HTTPS 抓包实战,多工具组合分析与高效排查指南
数据库·网络协议·ios·小程序·https·uni-app·iphone
星光一影2 天前
陪诊陪检系统源码,陪诊小程序,陪诊APP,陪诊服务,家政上门系统,居家护理陪护源码
mysql·小程序·uni-app·php
阿奇__2 天前
uniapp h5 app 小程序获取当前定位
小程序·uni-app
2501_915106322 天前
iOS性能调优的系统化实践,从架构分层到多工具协同的全流程优化指南(开发者深度版)
android·ios·小程序·架构·uni-app·iphone·webview