原生微信小程序封装request

好长时间没有写原生小程序,特别是那个request请求,乱七八糟,已经完全不适用现代化开发。

因此手搓了一个TypeScript版的request,如下:

TypeScript 复制代码
// request.ts

// 定义请求头的类型
type Headers = {
  // 指定内容类型,可以是 'application/json' 或 'application/x-www-form-urlencoded'
  'Content-Type': 'application/json' | 'application/x-www-form-urlencoded';
  // 认证令牌
  'token': string;
};

// 定义请求配置接口
interface RequestConfig {
  // 请求的URL
  url: string;
  // 请求的数据,可以是字符串、对象或ArrayBuffer
  data: string | object | ArrayBuffer;
  // HTTP方法,支持多种请求类型
  method: "OPTIONS" | "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "TRACE" | "CONNECT";
  // 可选的请求超时时间
  timeout?: number;
  // 可选的请求头
  header?: Headers;
}

// 请求拦截器,处理请求配置
const requestInterceptor = (config: RequestConfig) => {
  console.log(config)
  // 从本地存储中获取token
  const token = wx.getStorageSync("token") || "";
  if(!config.header) config.header = { 'Content-Type': 'application/json', token};
  // 返回处理后的请求配置
  return config;
};

// 发起请求的函数
const request = (
  // 请求的URL
  url: string,
  // 请求的数据,可以是字符串、对象或ArrayBuffer
  data: string | object | ArrayBuffer,
  // 请求的方法,使用RequestConfig接口中的method类型
  method: RequestConfig['method'],
  // 可选的请求头,使用Headers类型
  header?: Headers,
  // 可选的请求超时时间
  timeout?: number,
) => {
  // 返回一个Promise对象,用于处理异步请求
  return new Promise((resolve, reject) => {
    // 使用请求拦截器处理请求配置
    const interceptedConfig = requestInterceptor({
      url,
      method,
      data,
      header,
      timeout,
    });
    // 发起wx.request请求
    wx.request({
      // 展开处理后的请求配置
      ...interceptedConfig,
      // 设置请求超时时间为5000毫秒
      timeout: 5000,
      // 请求成功的回调函数
      success: (res) => {
        // 如果状态码为200,解析数据并解决Promise
        if (res.statusCode === 200) resolve(res.data);
        // 否则,拒绝Promise并返回错误
        else reject(new Error(res.statusCode.toString()));
      },
      // 请求失败的回调函数,拒绝Promise并返回错误
      fail: (err) => {
        console.error(err);
        reject(err);
      }
    })
  })
}

export default request;

用法:

参数:

TypeScript 复制代码
await request(
  url,      // 路径
  data,     // 数据
  method,   // 请求类型
  heeader,  // 请请求头(可选)
  timeout,  // 时间限制(可选)
)
相关推荐
用户9385156350712 小时前
从"坐电梯"到"前端路由"——深入理解 Hash 路由原理
前端·typescript·全栈
苏灿烤鱼15 小时前
GitHub Trending 榜首|腾讯 Agent 记忆库技术拆解:分层记忆 vs 向量堆,让 AI 不再反复问
typescript·开源·agent
驳是16 小时前
入坑 UniApp 写小程序,一些感受
微信小程序
用户9385156350716 小时前
React 组件设计的三个层次:从类型约束到状态归属,再到纯展示
typescript·全栈
AI人工智能+电脑小能手18 小时前
【大白话说Java面试题 第216题】【10_网络协议篇】第7题:HTTP 协议和 HTTPS 协议的区别
java·http·网络安全·https·ssl/tls
想学好C++的oMen20 小时前
应用层协议http
网络·网络协议·http
A242073493020 小时前
Vue3 + TypeScript:后端数据在表格内渲染后进行增删改的完整实现步骤
前端·javascript·typescript
水獭比特20 小时前
AI 视频生成不是一次 HTTP 请求:先把长任务状态机补齐
人工智能·typescript
烛衔溟1 天前
HarmonyOS 网络连接 —— HTTP 请求、Axios 与 Socket 通信
http·华为·harmonyos
kaixin_啊啊1 天前
群晖部署Vaultwarden:HTTPS访问、自动填充与密码迁移
网络协议·http·https