当前位置: 首页 > news >正文

uniapp封装请求拦截器,封装请求拦截和响应拦截的方法

首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的api

1

2

3

4

5

6

7

8

9

uni.request({

  url: '',

  method: 'GET',

  data: {},

  header: {},

  success: res => {},

  fail: () => {},

  complete: () => {}

});

可以看到我们每次请求数据的时候都需要按照这个格式来请求,这样会使代码冗余并且难以维护,所以就需要将uni.request进行二次封装

uni.request 三种请求方式

uni.request 请求方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// 默认方式

uni.request({

  url: 'https://www.example.com/request',

  success: (res) => {

    console.log(res.data);

  }

});

// Promise

uni.request({

    url: 'https://www.example.com/request'

  })

  .then(data => {

    //data为一个数组,数组第一项为错误信息,第二项为返回数据        

    var [error, res] = data;

    console.log(res.data);

  }) // Awaitasync 

function request() {

  var [error, res] = await uni.request({

    url: 'https://www.example.com/request'

  });

  console.log(res.data);

}

封装响应拦截器

1. 新建一个request.js文件

1

2

3

4

5

6

7

8

9

10

11

export default {

  config: {

    baseURL: '',

    // 响应拦截器

    beforeRequest() {},

    // 请求拦截器

    handleResponse() {}

  },

  // request 请求

  request() {}

}

2. 在响应拦截器中封装公共方法

我们先在request中调用 beforeRequest

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// common/request.jsexport

default {

  config: {

    baseURL: baseURL,

    // 响应拦截器

    beforeRequest() {

      return new Promise((resolve, reject) => {

        console.log('响应拦截器') resolve('123456')

      })

    },

    // 请求拦截器

    handleResponse() {}

  },

  // request 请求

  request() {

    return this.config.beforeRequest().then(opt => {

      console.log(opt)

    })

  }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// pages/index/index.vue

import api from '@/common/request.js'

export default {

  data() {

    return {}

  },

  onLoad() {

    this.getData()

  },

  methods: {

    getData() {

      api.request()

    }

  }

}

在浏览器的控制台中查看打印的内容

可以看到成功打印出来,然后就可以将公共的的方法封装在响应拦截器中

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

// 可以从外部引入baseURL,也可以定义到config下的baseURL中

import baseURL from '@/common/baseURL.js'

export default {

  config: {

    baseURL: baseURL,

    // 处理token的方法

    getToken() {

      let token = uni.getStorageSync('token');

      if (!token) {

        return uni.reLaunch({

          url: '/pages/login/login'

        })

      }

      return token

    },

    // 响应拦截器

    beforeRequest(options = {}) {

      return new Promise((resolve, reject) => {

        options.url = this.baseURL + options.url;

        options.method = options.method || 'GET';

        // options.responseType = 'arraybuffer'

        // 封装自己的请求头

        options.header = {

          token: this.getToken()

        }

        resolve(options)

      })

    },

    // 请求拦截器

    handleResponse() {}

  },

  // request 请求

  request(options = {}) {

    return this.config.beforeRequest(options).then(opt => {

      // 返回 uni.request 

      return uni.request(opt)

    })

  }

}

1

2

3

4

5

6

7

8

9

10

// pages/index/index.vue

methods: {

  getData() {

    api.request({

      url: '/fish/tag/list'

    }).then(data => {

      console.log(data)

    })

  }

}

查看打印结果

封装请求拦截

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

// 可以从外部引入baseURL,也可以定义到config下的baseURL中

import baseURL from '@/common/baseURL.js'

export default {

  config: {

    baseURL: baseURL,

    // 处理token的方法

    getToken() {

      let token = uni.getStorageSync('token');

      if (!token) {

        return uni.reLaunch({

          url: '/pages/login/login'

        })

      }

      return token

    },

    // 响应拦截器

    beforeRequest(options = {}) {

      return new Promise((resolve, reject) => {

        options.url = this.baseURL + options.url;

        options.method = options.method || 'GET';

        // 封装自己的请求头

        options.header = {

          token: this.getToken()

        }

        resolve(options)

      })

    },

    // 请求拦截器

    handleResponse(data) {

      return new Promise((resolve, reject) => {

        const [err, res] = data;

        // 处理错误

        if (res && res.statusCode !== 200) {

          let msg = res.data.msg || '请求错误';

          uni.showToast({

            icon: 'none',

            title: msg

          }) return reject(msg);

        }

        if (err) {

          uni.showToast({

            icon: 'none',

            title: '请求错误'

          }) return reject(err);

        }

        return resolve(res.data)

      })

    }

  },

  // request 请求

  request(options = {}) {

    return this.config.beforeRequest(options).then(opt => {

      // 这里看不懂的可以看上面 uni.request 三种请求方式的第二种

      return uni.request(opt)

    }).then(res => this.config.handleResponse(res))

  }

}

智能机器人

除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址:uniapp封装请求拦截器(封装请求拦截和响应拦截的方法)-老汤博客

相关文章:

uniapp封装请求拦截器,封装请求拦截和响应拦截的方法

首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的api 1 2 3 4 5 6 7 8 9 uni.request({ url: , method: GET, data: {}, header: {}, success: res > {}, fail: () > {}, complete: () > {} }); 可以看到我们每次请求数据的时候都需…...

开局一个启动器:从零开始入坑ComfyUI

前几天刷某乎的时候看到了一位大佬写的好文,可图 IP-Adapter 模型已开源,更多玩法,更强生态! - 知乎 (zhihu.com) 久闻ComfyUI大名,决定试一下。这次打算不走寻常路,不下载现成的一键包了,而是…...

34_YOLOv5网络详解

1.1 简介 YOLOV5是YOLO(You Only Look Once)系列目标检测模型的一个重要版本,由 Ultralytics 公司的Glenn Jocher开发并维护。YOLO系列以其快速、准确的目标检测能力而闻名,尤其适合实时应用。YOLOV5在保持高效的同时&#xff0c…...

深入解析Perl的正则表达式:功能、应用与技巧

在编程世界中,正则表达式是一种强大的文本处理工具,它能够用于搜索、替换、匹配字符串等操作。Perl语言以其强大的文本处理能力著称,而其正则表达式功能更是其核心特性之一。本文将深入探讨Perl中的正则表达式,包括其基本语法、应…...

【JAVA】Hutool CollUtil.sort 方法:多场景下的排序解决方案

在 Java 开发中&#xff0c;集合的排序是常见需求。Hutool 库的 CollUtil.sort 方法提供了一系列用于排序的实用功能&#xff0c;适用于不同的场景。以下是对几种常见场景及其实现方式的总结&#xff1a; <dependency><groupId>org.dromara.hutool</groupId>…...

Mysql-安装(Linux)

1、下载mysql 切换到/opt/app目录下&#xff0c;执行如下命令&#xff0c;下载mysql 5.7.38版本。 [rootywxtdb app]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 解压安装包 [rootywxtdb app]# tar -zxvf mysql-5.7.38-l…...

如何查看日志

别用 cat cat 把整个日志文件刷屏 慎用 vim 日志不大随便整&#xff0c;因为vim会把整个日志文件读到内存&#xff0c;大日志文件&#xff08;G级别&#xff09;会造成内存占用过高&#xff0c;影响其他程序&#xff0c;在业务机器上查看日志这样尤其危险 less is more 还…...

python实现责任链模式

把多个处理方法串成一个list。下一个list的节点是上一个list的属性。 每个节点都有判断是否能处理当前数据的方法。能处理&#xff0c;则直接处理&#xff0c;不能处理则调用下一个节点&#xff08;也就是当前节点的属性&#xff09;来进行处理。 Python 实现责任链模式&#…...

Prometheus监控ZooKeeper

1. 简介 ZooKeeper是一个分布式协调服务,在分布式系统中扮演着重要角色。为了确保ZooKeeper集群的健康运行,有效的监控至关重要。本文将详细介绍如何使用Prometheus监控ZooKeeper,包括安装配置、关键指标、告警设置以及最佳实践。 2. 安装和配置 2.1 安装ZooKeeper Exporter…...

vuepress搭建个人文档

vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录&#xff1a;项目研究创建时间&#xff1a;2024/7/23作者&#xff1a;星云<Xing…...

面试题 17.14.最小K个数

题目&#xff1a;如下图 答案&#xff1a;如下图 /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* a,int n,int root) {int parent root;int child parent * 2 1;//默认左孩子是大的&#xff0c;将其与右孩子比较&am…...

C++实现LRU缓存(新手入门详解)

LRU的概念 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;是一种常用的缓存淘汰策略&#xff0c;主要目的是在缓存空间有限的情况下&#xff0c;优先淘汰那些最长时间没有被访问的数据项。LRU 策略的核心思想是&#xff1a; 缓存空间有限&#xff1…...

汇昌联信数字做拼多多运营实力好吗?

汇昌联信数字在拼多多运营方面的实力如何?汇昌联信数字作为一家专注于电子商务运营服务的公司&#xff0c;其在拼多多平台的运营能力是值得关注的。根据市场反馈和客户评价&#xff0c;汇昌联信数字在拼多多的运营实力表现良好&#xff0c;能够为客户提供专业的店铺管理、产品…...

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…...

(十九)原生js案例之h5地里位置信息与高德地图的初使用

h5 地里位置信息 1. 获取当前位置信息 window.onload function () {const oBtn document.querySelector("#btn");const oBox document.querySelector("#box");oBtn.onclick function () {window.navigator.geolocation.getCurrentPosition(function (…...

三、基础语法2(30小时精通C++和外挂实战)

三、基础语法2&#xff08;30小时精通C和外挂实战&#xff09; B-02内联函数B-04内联函数与宏B-05_constB-06引用B-07引用的本质B-08-汇编1-X86-X64汇编B-09-汇编2-内联汇编B-10-汇编3-MOV指令C-02-汇编5-其他常见指令C-05-汇编8-反汇编分析C-07-const引用、特点 B-02内联函数 …...

gitee设置ssh公钥密码频繁密码验证

gitee中可以创建私有项目&#xff0c;但是在clone或者push都需要输入密码&#xff0c; 比较繁琐。 公钥则可以解决该问题&#xff0c;将私钥放在本地&#xff0c;公钥放在gitee上&#xff0c;当对项目进行操作时带有的私钥会在gitee和公钥进行验证&#xff0c;避免了手动输入密…...

BGP选路之Next Hop

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较,以确定出去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优BGP路由放进P路由表中…...

牛客14666(优先屏障) + 牛客14847(Masha与老鼠)

文章目录 写在前面14666-优先屏障思路编程 14847-Masha与老鼠思路编程 写在前面 昨天刷的这两道题写了很久&#xff0c;特别是Masha与老鼠这道题&#xff0c;写了都快3个小时&#xff0c;主要还是理解代码逻辑有点难&#xff0c;不过写完之后感觉收获挺大的&#xff0c;给我以…...

Git下载与安装

下载网址&#xff1a;https://git-scm.com/downloads 下载之后开始安装 选择安装路径&#xff0c;next 选择需要安装的组件&#xff0c;这里默认即可&#xff0c;next 选择菜单文件夹&#xff0c;这里默认即可&#xff0c;next 选择默认编辑器&#xff0c;默认推荐的即可&…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...