仿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`)
}
相关推荐
Bruce_Liuxiaowei12 小时前
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
python·小程序·节日
然后就去远行吧15 小时前
小程序基础 —— 02 微信小程序账号注册
微信小程序·小程序
爱吃鱼的酱酱仔15 小时前
uniapp实现APP、小程序与webview页面间通讯
小程序·uni-app
科技小E17 小时前
NVR小程序接入平台EasyNVR视频监控技术如何助力餐饮行业实现明厨亮灶
安全·小程序·音视频·视频监控
xiangxiongfly91518 小时前
微信小程序之async-validator
微信小程序·小程序·validator·async-validator
说私域19 小时前
关键客户转化为会员的重要性及 “开源 AI 智能名片 2 + 1 链动模式商城小程序” 在其中的应用剖析
人工智能·小程序
ai安歌20 小时前
【微信小程序】微信小程序中的异步函数是如何实现同步功能的
微信小程序·小程序·同步·异步
weixin_4825655320 小时前
Android IC读写器安卓小程序 3
android·小程序
guanpinkeji1 天前
旧衣回收小程序开发,绿色生活,便捷回收
小程序·生活·小程序开发·小程序制作·回收小程序·回收·旧衣回收
jiejianyun8571 天前
上门回收小程序如何搭建?有个小程序收破烂也要高端?
服务器·小程序·apache