仿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`)
}
相关推荐
chaosama10 小时前
微信小程序带参分享、链接功能
微信小程序·小程序
胡西风_foxww11 小时前
微信小程序动态组件加载的应用场景与实现方式
微信小程序·应用·加载·动态组件
ALLSectorSorft13 小时前
上门服务小程序会员系统框架设计
小程序·apache
甜甜的资料库15 小时前
基于小程序老人监护管理系统源码数据库文档
微信小程序
说私域20 小时前
基于定制开发开源AI智能名片S2B2C商城小程序的首屏组件优化策略研究
人工智能·小程序·开源·零售
Uyker1 天前
微信小程序动态效果实战指南:从悬浮云朵到丝滑列表加载
前端·微信小程序·小程序
happyCoder1 天前
uniapp 微信小程序实现定时消息订阅提醒(前后端)
微信小程序
Uyker2 天前
从零开始制作小程序简单概述
前端·微信小程序·小程序
打小就很皮...2 天前
HBuilder 发行Android(apk包)全流程指南
前端·javascript·微信小程序
说私域2 天前
定制开发开源AI智能名片驱动下的海报工厂S2B2C商城小程序运营策略——基于社群口碑传播与子市场细分的实证研究
人工智能·小程序·开源·零售