基于 wx.request 封装类似axios的拦截器

微信小程序 --- wx.request网络请求封装 为了方便统一处理请求参数以及服务器响应结果,为WxRequest添加拦截器功能,拦截器包括请求拦截器和响应拦截器请求拦截器本质上是在请求之前调用的函数,用来对请求参数进行新增和修改响应拦截器本质上是在响应之后调用的函数,用来对响应数据做点什么注意:不管成功响应还是失败响应,都会执行响应拦截器// 请求拦截器// 在发送请求之前做些什么// 响应拦截器// 对响应数据做点什么通过使用方式,我们可以得出结论:可以在WxRequest类内部定义实例属性,属性中需要包含request以及。 阅读详情

在开发微信小程序的过程中,因为在接口发送请求需要对请求入参进行统一加密,但是wx.request没有提供类型axios的请求拦截和响应拦截方式,所以觉得自己封装一个。

// 请求方式
export enum HttpMethod {
  GET = "GET",
  HEAD = "HEAD",
  POST = "POST",
  PUT = "PUT",
  DELETE = "DELETE",
  OPTIONS = "OPTIONS",
  TRACE = "TRACE",
  CONNECT = "CONNECT"
}

/// 请求入参
class RequestMessage {
  Api:string;
  Param: any;
  Method: HttpMethod;
  Header: Object;
  constructor(api:string,param:any,method:HttpMethod = HttpMethod.GET,header:any = null){
    this.Api = api;
    this.Param = param;
    this.Method = method;
    this.Header = header;
  }
}

/**
 * HttpClient 实例
 */
class HttpClient {
  private RequestInterceptor: Function | undefined;
  private ReponseInterceptor: Function | undefined;
  private baseUrl: string;
  constructor(baseUrl:string = ''){
    this.baseUrl = baseUrl;
  }
  
  /** 请求拦截器 */
  public UseRequestInterceptor(interceptor:(requestMessage: RequestMessage) => boolean): HttpClient {
    this.RequestInterceptor = interceptor;
    return this;
  }

  /** 响应拦截器 */
  public UseReponseInterceptor(interceptor:(reponseMessage:any) => any): HttpClient {
    this.ReponseInterceptor = interceptor;
    return this;
  }

  /**
   * 发起请求
   * @param requestMessage 请求体 
   */
  private Request(requestMessage:RequestMessage){ 
    var that = this;
    return new Promise((resolve,reject) => {
      if(that.RequestInterceptor && !that.RequestInterceptor(requestMessage))
        return reject("取消请求");
      wx.request({
        url: `${that.baseUrl}${requestMessage.Api}`,
        data:requestMessage.Param,
        method: requestMessage.Method,
        header:requestMessage.Header,
        success(res) {
          resolve && resolve(that.ReponseInterceptor && that.ReponseInterceptor(res));
        },
        fail(error){ 
          reject && reject(error);
         }
      });
    });
  }

  /**
   * Get 请求
   * @param api 接口
   * @param param 入参
   */
  public Get(api: string, param: any) {
    return this.Request(new RequestMessage(api,param));
  }

  /**
   * Head 请求
   * @param api 
   * @param param 
   * @returns 
   */
  public Head(api: string, param: any){
    return this.Request(new RequestMessage(api,param,HttpMethod.HEAD));
  }

  /**
   * Post 请求
   * @param api 接口 
   * @param param 入参
   */
  public Post(api: string, param: any){
    return this.Request(new RequestMessage(api,param,HttpMethod.POST));
  }

  /**
   * Connect 请求
   * @param api 
   * @param param 
   * @returns 
   */
  public Connect(api: string,param:any){
    return this.Request(new RequestMessage(api,param,HttpMethod.CONNECT));
  }

  /**
   * OPTIONS 请求
   * @param api 
   * @param param 
   * @returns 
   */
  public Options(api: string,param:any){
    return this.Request(new RequestMessage(api,param,HttpMethod.OPTIONS));
  }

  /**
   * Delete 请求
   * @param api 接口
   * @param param 入参
   */
  public Delete(api: string,param?: any){
    return this.Request(new RequestMessage(api,param,HttpMethod.DELETE));
  }

  /**
   * Put 请求
   * @param api 接口
   * @param param 入参
   */
  public Put(api: string, param: any){
    return this.Request(new RequestMessage(api,param,HttpMethod.PUT));
  }
}

/** HttpClient工厂 */
export class HttpClientFactory{
  public static Create(baseUrl:string = ''): HttpClient{
    return new HttpClient(baseUrl);
  }
}

使用方式

import { HttpClientFactory } from '../utils/request';

// 其他模块
import { StatusCode } from '../enums/httpstatus-enum';
import * as StorageConst from '../consts/storage-const';

// 配置基础地址
// export const client = HttpClientFactory.Create('http://121.196.126.53:5003/api/');
export const client = HttpClientFactory.Create('http://127.0.0.1:5000/api/');

/** 请求拦截器 */
client.UseRequestInterceptor(requestMessage => {
  if(requestMessage.Api !== "auth/login"){
    requestMessage.Header =  {
      "Authorization" : wx.getStorageSync(StorageConst.BearerToken)
    };
  }
  return true;
});

/** 响应拦截器 */
client.UseReponseInterceptor(reponseMessage => {
  reponseMessage&&console.log(reponseMessage);
  switch(reponseMessage.statusCode){  
    case StatusCode.StatusCode200Ok:
      return reponseMessage.data;
    case StatusCode.StatusCode401NotAuthorization:
      wx.redirectTo({ url :'../auth/login/index'});
      return;
      case StatusCode.StatusCode404NotFound:
      wx.showToast(reponseMessage.statusCode)
      return;
    default:
      return "状态码异常";
  }
});

封装接口

import { LoginInput } from './i-auth-service';
import { client } from '../http-client';
import * as StorageConst from '../../consts/storage-const';

/**
 * 
 * @param options 
 */
export function Login(options:LoginInput) {
  client.Post('auth/login',options).then(res => {
    wx.setStorageSync(StorageConst.BearerToken, `Bearer ${res.data}` );
    console.log(res);
  }).catch(reason => {
    console.log(reason);
  });
}

微信小程序 wx.request 请求封装 微信小程序 wx.request() 请求封装 阅读详情

相关推荐

ajax,fetch,axios,wx.request封装

axios封装 推荐vue框架中使用 // index.js import axios from 'axios' import { Toast } from 'vant' // 创建一个错误 function errorCreate (msg) { const error = new Error(msg) errorLog(error) throw error } // 记录和显示错误 function errorLog (error) { // 打印到控制台 if (process

qq_45955475的博客 284

wx.reqest 插件(请求拦截+响应拦截+ 无感刷新)

在请求拦截器上根据返回的状态码,如果为401说明token失效,然后重新调用接口获取新的token,重新储存新的token,然后获取原来接口的请求参数,重新添加字段authorization,重新发起请求。先引入第三方插件 wx.https,构建npm,在页面中引入写拦截器,在请求拦截中指定默认头的信息,登陆完成后给token添加字段返回options。拦截器可以根据返回的状态码进行操作,将其挂载在wx全局上。

2301_77783555的博客 722

微信小程序wx.request拦截器使用详解

主要介绍了微信小程序wx.request拦截器详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

小程序封装网络请求和拦截器_小程序请求拦截器(1)

封装一个request函数,用于发送请求。该函数接受一个参数options,用于配置请求。我们可以在该函数中使用小程序提供的wx.request接口发送请求,并在请求完成后返回一个Promise对象,以便于我们进行后续的操作。

2401_84187563的博客 702

Jmeter压测报告

账户分析压测报告 一、测试内容 本次测试是针对账户分析进行的压力测试,在账户分析查询接口中,只对用户资产查询接口进行压力测试,其中不包含用户签名校验功能。 二、测试方法 本次采用apache的开源测试工具jmeter,采用本地动态拼装请求数据并通过http协议GET方式发送每日盈亏查询请求。并采用1000个用户账号测试访问情况。...

qq_31108731的博客 6627

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 272

vue 拦截器_封装微信小程序http拦截器

封装微信小程序http拦截器微信小程序微信小程序是数据驱动的应用,开发技术和vue、react和angular等mv*技术类似。在vue下可以用vue-resource、axios等模块进行http请求,但是在微信小程序上,http请求只支持wx.request(OBJECT),所以我们需要对wx.request进行封装,实现http拦截器的功能。第一步:创建一个request.js文件第二步:确...

weixin_39611174的博客 207

基于大模型的恶性胸腔积液全周期预测与诊疗方案研究

本研究基于大模型技术构建了恶性胸腔积液全流程预测与诊疗体系,涵盖术前风险评估、术中方案优化、术后恢复预测及并发症预防。通过整合多源医疗数据,实现了手术风险概率预测(准确率80%)、并发症预警(AUC值0.85)及个性化康复方案制定,显著提升诊疗精准度。研究创新性地将Transformer架构与多模态数据融合,在100例临床验证中显示良好性能,但存在数据样本局限、模型可解释性不足等问题。未来将扩大多中心临床验证,优化算法可解释性,探索与基因检测等技术的结合应用,推动恶性胸腔积液的精准诊疗发展。

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1897

基于wx.request封装类似axios的请求方法

基于wx.request封装类似axios的请求方法背景做法 背景 在写H5项目的时候,我们可以通过第三方库axios实现ajax请求,其中使用axios最大的好处便是拦截器,通过拦截器进行请求拦截和响应拦截,之后再依据业务做进一步的处理。而微信小程序中,我们通过wx.request,自己封装,也能实现类似axios的功能。 做法 import urlConfig from './urlConfig'; const baseUrl = urlConfig().backendBaseUrl; const t

博哥的二进制世界 1110

如何使用apifox打包测试用例生成测试套件自动化执行

使用apifox打包测试用例生成测试套件自动化执行

weixin_55613512的博客 2886

卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下: 状态预测:(1) 其中,X(k|k)是k时...

sunlin972913894的博客 2万+

微信小程序网路请求

小程序中绝大部分的 API 都支持,也有几个 API 不支持返回 Promise,其中就包含wx.request,开发中需要自行对wx.request进行封装也可以使用第三方的封装好的模块。# 检查有没有未提交的代码git status。

qq_43319351的博客 566

中标麒麟,postgres报错invalid value for parameter "timeZone":"Asia/Beijing"

在中标麒麟服务器上,安装postgres,启动tomcat容器时,报invalid value for parameter "timeZone":"Asia/Beijing"。 查看postgres运行日志,也报同样的错误。 报错原因:服务器的时区,在Postgres支持的时区目录中找不到。当时在服务器上信息为Beijing 解决步骤: 1. cat /etc/sysconfig/cloc

u010213931的博客 7924

【技术解析】wx.request 封装:优化小程序网络请求的最佳实践

在当今的小程序开发领域,网络请求是构建动态应用的核心。微信小程序提供的 wx.request API 虽然强大,但在面对复杂业务逻辑时,其直接使用方式可能会带来一系列问题。本文将深入探讨封装 wx.request 的必要性,并提供一套实用的封装方案。

everfoot的博客 1596

linux入侵排查-综合日志分析

2.分析攻击者首次成功登录web管理后台的时间 还可以知道攻击者可能是通过10.2.4.11这个跳板服务器跳过来的,然后我们继续排查,可以发现日志中POST请求大多都是1047字节,然后往后大多是300字节,POST请求的响应状态码有200和302这两个,其中的302是爆破成功后持续爆破产生的日志,再1047字节和300字节中间夹着一个978字节,就是200响应和302响应的中间。7.分析攻击者留下的持久化后门的时间和后门执行情况 排查计划任务,发现有一个计划任务还是被加密的,应该是反弹shell的。

chinese_cabbage0的博客 643

自托管AI邮件助手imap-mcp:安全连接Claude与个人邮箱的完整指南

在AI助手日益普及的今天,如何安全地让AI访问个人邮箱数据成为关键挑战。传统方法如直接暴露IMAP/SMTP凭证存在严重安全隐患,而第三方SaaS服务则涉及隐私泄露风险。Model Context Protocol (MCP) 作为一种新兴的标准化协议,为AI工具安全接入提供了解决方案。其核心价值在于实现数据源与AI助手间的安全、标准化交互,特别适用于处理敏感信息的场景。imap-mcp正是基于MCP协议构建的自托管邮件网关,它通过多层安全机制(包括主密钥加密和OAuth令牌哈希化)保护用户凭证,让用户能在

weixin_28295799的博客 655

手写简易版axios拦截器,实现微信小程序wx.request的封装与拦截

axios是一个功能强大的网络请求库,其中拦截器又是axios的精髓。在小程序的开发或者需要手动实现ajax的时候,没有实现对请求的拦截,开发的时候非常不方便,因此手写一个简易版的axios拦截器。

qq_39851888的博客 2173

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

后台response向小程序返回参数_手写简易版axios拦截器,实现微信小程序wx.request的封装与拦截...

前言: axios是一个功能强大的网络请求库,其中拦截器又是axios的精髓。在小程序的开发或者需要手动实现ajax的时候,没有实现对请求的拦截,开发的时候非常不方便,因此手写一个简易版的axios拦截器。拦截器的实现1、实现思路1、实现一个通用的请求request函数,所有请求都调用这个函数去进行网络请求2、请求调用request函数3、在正式发送请求前,执行请求前beforeRequ...

weixin_39767386的博客 814

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【微信小程序】wx.request简易仿Axios封装

wx.request()方法不支持Promise风格的调用方式,且无法使用拦截器、baseUrl等功能,我根据自己的使用习惯,对其进行简单封装。

LEE210的博客 352

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

六九、ajax,fetch,axios,wx.request封装

前端开发不可避免的接口请求,而在使用原生ajax,或者其他包的时候要么功能不全,要么包太大,所有统一封装一套供日常开发使用。 一、 ajax封装 适用于所有框架或者原生开发 const config={ IS_DEV_ENV : process.env.NODE_ENV !== 'production', XHR_RES_CODE : { ...

梅某某 806

小程序请求封装和拦截器以及接口模块化

通常我们使用 axios 库中的 API 设置常用配置以及请求方法封装。更多详情,请查看:axios 常用配置以及请求方法封装。小程序中使用 wx.request API 进行网络请求数据,但是小程序中未对请求提供拦截 API。在 Taro 框架中,我们可以看的Taro.addInterceptor(callback) API可以使用拦截器在请求发出前或发出后做一些额外操作。这里的提供的拦截器:请求拦截和响应拦截是没有区分的。 一、请求封装 wx.request 参数说明: 属性 类型 ...

qq_36437172的博客 4763

微信小程序统一封装request请求,统一拦截校验

前言 因为用习惯了Vue的axios,将请求统一封装,这样可以编写一处请求,然后让需要的模块直接引用调用即可,同时也可以做拦截器,token状态刷新等等操作,或者响应特定的东西。 因此就试着封装request,并且使用风格上尽量偏向于跟vue admin template里的request类似,这样也好让自己上手。 代码实现 封装wx.request,在utils创建文件,request.js: const app = getApp(); var baseURL = app.getURL();//将url定

小墨鱼的网络博客,不随大流的程序员世界... 4847

react拦截器的使用_封装微信小程序http拦截器

封装微信小程序http拦截器微信小程序微信小程序是数据驱动的应用,开发技术和vue、react和angular等mv*技术类似。在vue下可以用vue-resource、axios等模块进行http请求,但是在微信小程序上,http请求只支持wx.request(OBJECT),所以我们需要对wx.request进行封装,实现http拦截器的功能。第一步:创建一个request.js文件第二步:确...

weixin_42365510的博客 348

uni.request 和 axios 的区别?前端请求库全面对比

摘要: 本文对比了uni-app框架内置的uni.request与第三方HTTP库axios的核心差异。uni.request专为uni-app多端开发设计,开箱即用且全端兼容,但功能较基础;axios作为通用库,支持拦截器、取消请求等高级功能,语法更现代化,但需适配小程序环境。选型建议:简单uni-app项目优先使用uni.request,复杂业务或需要跨框架复用代码时推荐axios。两者无绝对优劣,需根据项目复杂度与多端需求权衡选择。

. 617

对于小程序拦截器http请求

微信小程序是数据驱动的应用,开发技术和vue、react和angular等mv*技术类似。在vue下可以用vue-resource、axios等模块进行http请求,但是在微信小程序上,http请求只支持wx.request,所以需要我们针对wx.request进行封装,实现http拦截器的功能。 第一步:创建一个request.js文件 建议在utils下面创建一个request.js文件 ...

w001yy的博客 5516

5 拦截器拦截请求路由_手写简易版axios拦截器,实现微信小程序wx.request的封装与拦截...

前言: axios是一个功能强大的网络请求库,其中拦截器又是axios的精髓。在小程序的开发或者需要手动实现ajax的时候,没有实现对请求的拦截,开发的时候非常不方便,因此手写一个简易版的axios拦截器。拦截器的实现1、实现思路1、实现一个通用的请求request函数,所有请求都调用这个函数去进行网络请求2、请求调用request函数3、在正式发送请求前,执行请求前beforeRequ...

weixin_36003021的博客 818
上一篇: linux 安装 nginx 部署 vue项目
下一篇: ajax ? 如何创建一个ajax请求
wll3241@163.com
博客等级 码龄9年 3粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值