01 基础request

news2024/11/16 7:42:32

目录

类 WxRequest 的定义

静态属性 default

构造函数 constructor

方法 request

HTTP 方法封装

创建 WxRequest 实例并导出

完整代码:

WxRequest 的定义

创建一个 WxRequest 类包含一个静态属性 default 和几个方法,用于处理网络请求。

静态属性 default
  • baseURL 是API请求的基础URL,所有通过该类发起的请求都会在这个基础上进行。
  • method 定义了默认的HTTP请求方法,这里设置为 GET
  • header 包含了默认的请求头,这里设置了默认的 Content-Typeapplication/json
  • data 是默认的请求数据,这里设置为 null
  • timeout 定义了请求的超时时间,这里设置为60秒。
构造函数 constructor
constructor(params = {}) {
  WxRequest.default = { ...WxRequest.default, ...params };
}
  • 构造函数接受一个参数 params,它是一个对象,用于覆盖默认配置。通过展开运算符 ...,我们可以将传入的 params 与默认配置合并,形成最终的配置。
方法 request
request(options) {
  options.url = WxRequest.default.baseURL + options.url;
  const finalOptions = { ...WxRequest.default, ...options };
  return new Promise((resolve, reject) => {
    wx.request({
      ...finalOptions,
      success: resolve,
      fail: reject,
    })
  })
}
  • request 方法是核心方法,它接收一个 options 对象,包含了请求的具体信息。
  • 首先将 options.urlbaseURL 拼接,形成完整的请求URL。
  • 然后将默认配置与传入的 options 合并,形成最终的请求配置 finalOptions
  • 使用 wx.request 发起请求,并返回一个 Promise 对象,这样就可以在调用 request 方法的地方使用 .then().catch() 来处理成功和失败的响应。
HTTP 方法封装

为常见的HTTP方法 GET, POST, PUT, DELETE 提供封装:

get(url, data, config) {
  return this.request(
    Object.assign({
      url,
      method: 'GET',
      data,
    }, config)
  )
}
// post, put, delete 方法类似
  • 这些方法内部调用了 request 方法,并提供了默认的 methoddata
  • 使用 Object.assign 将传入的配置与默认配置合并,并传递给 request 方法。

创建 WxRequest 实例并导出

const instance = new WxRequest({
  baseURL: 'https://gmall-prod.atguigu.cn/mall-api',
  timeout: 60000
});
export default instance;
  • 创建了一个 WxRequest 的实例 instance,并传入了基础配置,包括 baseURLtimeout
  • 使用 export default 将实例导出,这样在其他文件中可以通过导入 instance 来使用封装好的网络请求方法。
    这个封装允许在小程序的任何地方复用 instance 实例,而不必每次都重新配置基础信息,使得代码更加模块化和可维护。

为了方便统一处理请求参数以及服务器响应结果,我们需要为 WxRequest 添加拦截器功能,拦截器包括 请求拦截器响应拦截器


完整代码:
 

class WxRequest {
  // 默认配置对象
  static default = {
    baseURL: '', // 默认基础URL
    method: 'GET', // 默认请求方法
    header: {
      'content-type': 'application/json', // 默认的请求头内容类型
    },
    data: null, // 默认请求数据
    timeout: 60000, // 默认超时时间(毫秒)
  }

  /**
   * 构造函数,用于创建WxRequest实例
   * @param {Object} params - 构造函数参数,用于覆盖默认配置
   */
  constructor(params = {}) {
    WxRequest.default = { ...WxRequest.default, ...params };
  }

  /**
   * 发起网络请求的方法
   * @param {Object} options - 请求选项,包括url、method、header、data等
   * @returns {Promise} - 返回一个Promise对象,用于处理请求的响应
   */
  request(options) {
    // 拼接完整的URL
    options.url = WxRequest.default.baseURL + options.url;
    // 合并默认配置和请求配置
    const finalOptions = { ...WxRequest.default, ...options };
    return new Promise((resolve, reject) => {
      wx.request({
        ...finalOptions,
        success: resolve, // 直接使用resolve作为成功回调
        fail: reject, // 直接使用reject作为失败回调
      })
    })
  }

  // 封装GET实例方法
  get(url, data, config) {
    return this.request(
      Object.assign({
        url,
        method: 'GET',
        data,
      }, config)
    )
  }
  post(url, data, config) {
    return this.request(
      Object.assign({
        url,
        method: 'POST', // 
        data,
      }, config)
    )
  }
  put(url, data, config) {
    return this.request(
      Object.assign({
        url,
        method: 'PUT', // 
        data,
      }, config)
    )
  }
  delete(url, data, config) {
    return this.request(
      Object.assign({
        url,
        method: 'DELETE', // 
        data,
      }, config)
    )
  }

  // 其他方法(post, put, delete)保持不变...
}

// 创建WxRequest实例,并传递基础配置
const instance = new WxRequest({
  baseURL: 'https://gmall-prod.atguigu.cn/mall-api', // 设置基础URL
  timeout: 60000 // 设置超时时间
});

  export default instance;

拦截器的创建请看文章 :

02 创建拦截器-CSDN博客在实例化WxRequest类之后,可以通过修改和方法来配置具体的拦截器逻辑。// 配置请求拦截器// 在发送请求之前做些什么// 响应拦截器// 对响应数据做点什么这样,拦截器就被成功添加到了WxRequest类中,并且可以在请求前和响应后执行自定义逻辑。在请求拦截器中,你可以修改请求配置,例如添加头部信息;在响应拦截器中,你可以根据响应数据进行一些处理,例如提取响应数据中的data属性。请求拦截器:获取 token 并加入请求头;https://blog.csdn.net/everfoot/article/details/142441601

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kotlin编程全攻略:从基础到实战项目的系统学习资料

Kotlin作为一种现代、简洁的编程语言,正逐渐成为Android开发的新宠。本文将为您介绍一套全面的Kotlin学习资料,包括学习大纲、PDF文档、源代码以及配套视频教程,帮助您从Kotlin的基础语法到实战项目开发,系统地提升您的编程技能。…

jetlinks物联网平台学习2(加盐算法登陆)

加盐算法 加盐算法加密验证密码是否正确 对于传统的MD5加密,比更传统的直接保存账号密码稍微安全一点。 md5加密是一种hash算法 比如对于123456来说,md5算法结果一定是e10adc3949ba59abbe56e057f20f883e 这个结果是固定的。于是有的人准备一张彩虹表 预先…

vscode 配置django

创建运行环境 使用pip安装Django:pip install django。 创建一个新的Django项目:django-admin startproject myproject。 打开VSCode,并在项目文件夹中打开终端。 在VSCode中安装Python扩展(如果尚未安装)。 在项…

SpringCloud-07 GateWay01 网关技术

Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,从而加强安全保护。Spring Clou…

基于SpringBoot+Vue的高校门禁管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏:Java精选实战项目源码、Python精…

长亭WAF绕过测试

本文的Bypass WAF 的核心思想在于,一些 WAF 产品处于降低误报考虑,对用户上传文件的内 容不做匹配,直接放行 0、环境 环境:两台服务器,一台配置宝塔面板,一台配置长亭雷池WAF 思路主要围绕:m…

Python | Leetcode Python题解之第423题从英文中重建数字

题目: 题解: class Solution:def originalDigits(self, s: str) -> str:c Counter(s)cnt [0] * 10cnt[0] c["z"]cnt[2] c["w"]cnt[4] c["u"]cnt[6] c["x"]cnt[8] c["g"]cnt[3] c["h…

DAY78服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE 漏洞

知识点: 1、数据库-Redis-未授权RCE&CVE 2、数据库-Couchdb-未授权RCE&CVE 3、数据库-H2database-未授权RCE&CVE 前置知识 1、复现环境:Vulfocus(官方在线的无法使用,需要自己本地搭建) 官方手册:https://fofapr…

20240922 每日AI必读资讯

OpenAI 首席科学家 MIT演讲! - 揭示 o1模型训练核心秘密: 通过激励模型学习是培养 AGI 系统通用技能的最佳方式。 - 提出了类比“教人钓鱼”的方式,强调激励学习的重要性:“授人以鱼,不如授人以渔”,但是…

机器视觉OpenCV

1. 环境配置 1.1 安装Python https://www.python.org/downloads/windows/ python-3.9.13-amd64 pip下载加速: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host mirrors.aliyun.com1.2 安装Ope…

串口RS232,485

RS232和RS485都是串口通信的变种 TTL 串口的波特率/频率:9600,115200等,表示在1s内,串口可以传输9600个高低电平 那串口通信时,高低电压的范围:TTL电平 TTL 的电平标准,理想状态下&#xff0…

通信工程学习:什么是NFV网络功能虚拟化

NFV:网络功能虚拟化 NFV(Network Function Virtualization),即网络功能虚拟化,是一种通过虚拟化技术实现网络功能的技术手段。它借鉴了x86服务器的架构,将传统的网络硬件设备如路由器、交换机、防火墙、负载…

SOMEIP_ETS_123: SD_Length_of_Entry_Array_longer_than_message_allows

测试目的: 验证DUT能够拒绝一个条目数组长度超出消息总长度的SubscribeEventgroup消息,并以SubscribeEventgroupNAck作为响应。 描述 本测试用例旨在确保DUT遵循SOME/IP协议,当接收到一个条目数组长度超出消息总长度的SubscribeEventgroup…

【数据结构与算法 | 灵神题单 | 二叉搜索树篇】力扣653

1. 力扣653:两数之和IV - 输入二叉搜索树 1.1 题目: 给定一个二叉搜索树 root 和一个目标结果 k,如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果,则返回 true。 示例 1: 输入: root [5,3,6,2,4,null,7…

【Python从入门到进阶】65、Pandas如何批量拆分与合并Excel文件

接上篇《64、Pandas如何实现数据的Concat合并》 上一篇我们学习了Pandas如何实现数据的Concat合并,本篇我们来继续学习Pandas如何批量拆分与合并Excel文件。 一、引言 在当今数据驱动的时代,Excel文件作为数据处理和分析的基石,扮演着不可或…

xxl-job使用总结

xxl-job从入门到入土 xxl-job介绍 xxl-job是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。xxl-job支持调度中心集群和执行器集群。 xxl-job开源项目 xxl-job使用 xxl-job整合SpringBoot 引入xxl-job的依赖 <dependency>…

SpringBoot 3.4.0还没来之前,又又又更新啦!SpringBoot 3.3.4版本依赖升级,性能与稳定性再提升!

为什么要使用SpringBoot在现代开发中&#xff0c;高效与灵活性是每个开发团队追求的核心目标。然而&#xff0c;如何在不牺牲灵活性的前提下&#xff0c;快速构建复杂的应用程序&#xff0c;常常成为开发者的难题。SpringBoot的出现&#xff0c;正是为了解决这个矛盾。它以“约…

【Linux】【Hadoop】大数据基础实验一

实验一&#xff1a;熟悉常用的Linux操作和Hadoop操作 一、实验目的 Hadoop运行在Linux系统上&#xff0c;因此&#xff0c;需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作&#xff0c;为顺利开展后续其他实验奠定基础。 二、实验平台 操作系统…

从 Affine Particle-In-Cell (APIC) 到 Material Point Method (MPM 物质点法)

APIC与MPM Particle-In-Cell (PIC)Affine Particle-In-Cell (APIC)Material Point Method (MPM)关于边界投影等额外操作 Material Point Method (MPM 物质点法)是一种混合欧拉-拉格朗日视角物理仿真方法。 欧拉视角即网格视角&#xff0c;将空间划分为网格&#xff0c;通过表示…

【永磁同步电机(PMSM)】 5. PMSM 的仿真模型

【永磁同步电机&#xff08;PMSM&#xff09;】 5. PMSM 的仿真模型 1. 基于 Simulink 的仿真模型1.1 PMSM 的数学模型1.2 Simulink 仿真模型1.3 模块封装&#xff08;mask&#xff09;1.4 三相PMSM矢量控制仿真模型 2. Simscape 的 PMSM 模块2.1 PMSM 模块的配置2.2 PMSM 模块…