02 创建拦截器

请求拦截器本质上是在请求之前调用的函数,用来对请求参数进行新增和修改

响应拦截器本质上是在响应之后调用的函数,用来对响应数据做点什么。

创建拦截器的步骤如下:

整个流程是

  1. 声明拦截器(一个对象,包含请求响应拦截器)。
  2. 调用请求处理:发送请求之前调用请求拦截器处理。
  3. 调用响应处理:在 wx.requestsuccessfail 回调中,为 res 加上 isSuccess, 分别调用 this.interceptors.response 方法来处理响应数据。
  4. 定义拦截器(在实例中定义):
    1. 请求拦截器:获取 token 并加入请求头;
    2. 响应拦截器:
      1. isSuccess 为 false 则为网络错误,若为 true,分情况
      2. code=200,正常返回 data;
      3. code=208,token 失效;
      4. 其余使用默认错误

声明拦截器

  1. WxRequest 类中定义了一个 interceptors 对象,该对象包含两个方法:requestresponse。这两个方法分别用于处理请求前和响应后的逻辑。
interceptors = {// 请求拦截器request: (config) => config,// 响应拦截器response: (response) => response
}

调用请求处理

  1. request 方法中,在发送请求之前,通过调用 this.interceptors.request 方法来处理请求配置。
// 在发送请求之前调用请求拦截器
options = this.interceptors.request(options)

调用响应处理

  1. wx.requestsuccessfail 回调中,分别调用 this.interceptors.response 方法来处理响应数据。
// 当接口调用成功时会触发 success 回调函数
success: (res) => {// 不管接口成功还是失败,都需要调用响应拦截器const mergeRes = Object.assign({}, res, { config: options })resolve(this.interceptors.response(mergeRes))
},
// 当接口调用失败时会触发 fail 回调函数
fail: (err) => {// 不管接口成功还是失败,都需要调用响应拦截器const mergeErr = Object.assign({}, err, { config: options })// 不管接口成功还是失败,都需要调用响应拦截器err = this.interceptors.response(mergeErr)reject(err)
}

定义拦截器

  1. 在实例化 WxRequest 类之后,可以通过修改 instance.interceptors.requestinstance.interceptors.response 方法来配置具体的拦截器逻辑。
// 配置请求拦截器
instance.interceptors.request = (config) => {// 在发送请求之前做些什么return config
}
// 响应拦截器
instance.interceptors.response = (response) => {// 对响应数据做点什么return response.data
}

这样,拦截器就被成功添加到了 WxRequest 类中,并且可以在请求前和响应后执行自定义逻辑。在请求拦截器中,你可以修改请求配置,例如添加头部信息;在响应拦截器中,你可以根据响应数据进行一些处理,例如提取响应数据中的 data 属性。

下面是自定义逻辑:

  1. 请求拦截器:获取 token 并加入请求头;
  2. 响应拦截器:
    1. isSuccess 为 false 则为网络错误,若为 true,分情况
    2. code=200,正常返回 data;
    3. code=208,token 失效;
    4. 其余使用默认错误;
//在顶部引入
import {toast,modal}from './extendApi'// 配置请求拦截器instance.interceptors.request = (config) => {// 从本地获取 tokenif (wx.getStorageSync('token')) {// 如果存在 token ,则添加请求头config.header['token'] = wx.getStorageSync('token')}// 返回请求参数return config}// 响应拦截器instance.interceptors.response = async (response) => {const { data, isSuccess } = responseif (!isSuccess) {if (!isSuccess) {toast({title: '网络异常请重试',icon: 'error'})// 抛出异常return Promise.reject(response)}}// 网络正常switch (data.code) {case 200:// 接口调用成功,服务器成功返回了数据,只需要将数据简化以后返回即可return datacase 208:const res = await modal({content: '鉴权失败,请重新登录',showCancel: false})if (res) {// 既然用户需要重新进行登录,就需要把之前用户存储的信息(过期的 token) 进行清除// clearStorage()wx.clearStorageSync()wx.navigateTo({url: '/pages/login/login'})}default:toast({title: '程序出现异常,请联系客服或稍后重试!'})return Promise.reject(response)}}

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

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

相关文章

基于SpringBoot+Vue的智慧物业管理系统

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

transformer模型进行英译汉,汉译英

上面是在测试集上的表现 下面是在训练集上的表现 上面是在训练集上的评估效果 这是在测试集上的评估效果,模型是transformer模型,模型应该没问题,以上的是一个源序列没加结束符和加了结束符的情况。 transformer源序列做遮挡填充的自注意力,这就让编码器的输出中每个token的语…

寄存器与内存

第三课:寄存器与内存、中央处理器(CPU)、指令和程序及高级 CPU 设计-CSDN博客 锁存器 引入 ABO0(开始状态)001(将A置1)110(将A置0)11 无论怎么做,都没法从1变…

大学生必看!60万人在用的GPT4o大学数学智能体有多牛

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者&#x1…

Mamba所需的causal-conv1d 和mamba-ssm库在哪下载?

背景介绍 参照 Mamba [state-spaces/mamba: Mamba SSM architecture (github.com)] github中提到的环境安装[Installation 一栏] [Option] pip install causal-conv1d>1.4.0: an efficient implementation of a simple causal Conv1d layer used inside the Mamba block.…

Qt_窗口界面QMainWindow的介绍

目录 1、菜单栏QMenuBar 1.1 使用QMainWindow的准备工作 1.2 在ui文件中设计窗口 1.3 在代码中设计窗口 1.4 实现点击菜单项的反馈 1.5 菜单中设置快捷键 1.6 菜单中添加子菜单 1.7 菜单项中添加分割线和图标 1.8 关于菜单栏创建方式的讨论 2、工具栏QToolBar …

k8s Service 服务

文章目录 一、为什么需要 Service二、Kubernetes 中的服务发现与负载均衡 -- Service三、用例解读1、Service 语法2、创建和查看 Service 四、Headless Service五、集群内访问 Service六、向集群外暴露 Service七、操作示例1、获取集群状态信息2、创建 Service、Deployment3、创…

飞腾计算模块RapidIO性能测试

1、背景介绍 飞腾计算模块采用FT2000 64核处理器,搭配Tsi721 PCIE转RapidIO芯片,实现飞腾平台下的SRIO数据通信。操作系统采用麒麟信安,内核版本4.19.90. 2、驱动加载 驱动加载部分类似之前写过的X86平台下的RapidIO驱动加载,具…

Rsync未授权访问漏洞复现及彻底修复

一、什么是 Rsync? Rsync 是一种广泛使用的文件传输工具,它允许系统管理员和用户通过局域网(LAN)或广域网(WAN)在计算机之间同步文件和目录。Rsync 支持通过本地或远程 shell 访问,也可以作为守…

【Linux】常用指令详解一(ls,-a,-l,-d,cd,pwd,mkdir,touch,rm,clear)

1.前言 读了一些Linux常用指令的博文,很可惜没读到一点点手把手教怎么操作的博文,所以写一篇手把手教适合初学者的Linux常用指令博文 Linux的命令是树状结构 输入这一句命令:yum install -y tree 即可以查看Linux树状目录结构 查看示例&am…

STM32快速复习(十二)FLASH闪存的读写

文章目录 一、FLASH是什么?FLASH的结构?二、使用步骤1.标准库函数2.示例函数 总结 一、FLASH是什么?FLASH的结构? 1、FLASH简介 (1)STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据,检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…

Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装

音频解析 音频解码是指将压缩的音频数据转换为可以再生的PCM(脉冲编码调制)数据的过程。 FFmpeg音频解码的基本步骤如下: 初始化FFmpeg解码器(4.0版本后可省略): 调用av_register_all()初始化编解码器。 调用avcodec_register_all()注册所有编解码器。 打开输入的音频流:…

pthread_cond_signal 和pthread_cond_wait

0、pthread_join()函数作用: pthread_join() 函数会一直阻塞调用它的线程,直至目标线程执行结束(接收到目标线程的返回值),阻塞状态才会解除。如果 pthread_join() 函数成功等到了目标线程执行结束(成功获取…

运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。

一、问题描述 运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。 二、问题分析 在idea中,运行一个springboot项目,在使用大量的库和依赖的时候,会出现报错“命令行过长”&…

Java | Leetcode Java题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, new Comparator<int[]>() {public int compare(int[] person1, int[] person2) {if (person1[0] ! person2[0]) {return person2[0] - perso…

Java项目实战II基于Java+Spring Boot+MySQL的车辆管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 "随着…

Arthas jvm(查看当前JVM的信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.3 jvm&#xff08;查看当前JVM的信息&#xff09; 二、命令列表 2.1 jvm相关命令 2.1.3 jvm&#xff08;查看当前JVM的信息&#xff09; 基础语法&#xff1a; jvm [arthas18139]$ jvmRUNTIME …

【Delphi】通过 LiveBindings Designer 链接控件示例

本教程展示了如何使用 LiveBindings Designer 可视化地创建控件之间的 LiveBindings&#xff0c;以便创建只需很少或无需源代码的应用程序。 在本教程中&#xff0c;您将创建一个高清多设备应用程序&#xff0c;该应用程序使用 LiveBindings 绑定多个对象&#xff0c;以更改圆…

十七、RC振荡电路

振荡电路 1、振荡电路的组成、作用、起振的相位条件以及振荡电路起振和平衡幅度条件&#xff0c; 2、RC电路阻抗与频率、相位与频率的关系曲线; 3、RC振荡电路的相位条件分析和振荡频率