0

0

uni-app网络请求的拦截器配置与错误处理

下次还敢

下次还敢

发布时间:2025-07-06 10:25:15

|

1202人浏览过

|

来源于php中文网

原创

uni-app中,通过封装统一的网络请求工具并配置拦截器,可实现请求拦截、响应处理、错误提示和自动重试等功能。具体包括:1. 使用拦截器统一添加header、显示loading、处理状态码;2. 分类处理网络层、http、业务层错误,如断网提示、状态码日志记录、token失效跳转登录;3. 封装全局错误监听与自动重试机制,提升应用健壮性;4. 引入配置项实现拦截器灵活控制,便于调试与线上行为分离,从而规范项目网络请求逻辑,提高可维护性。

在uni-app中,网络请求的拦截和错误处理是提升应用健壮性和用户体验的关键环节。很多人在开发过程中容易忽略这部分配置,导致接口异常时无法及时反馈或统一处理。其实通过合理使用拦截器和全局错误处理逻辑,可以有效减少重复代码、统一错误提示,还能自动做一些兜底操作,比如断网重试、token失效跳转登录等。

一、拦截器的作用与基本配置

拦截器本质上是对发起请求和响应返回这两个阶段进行“干预”。在uni-app中,通常基于uni.request封装一个统一的网络请求工具,并在其基础上添加请求拦截和响应拦截。

以常见的封装方式为例:

const http = {
  request(options) {
    // 请求拦截器
    uni.showLoading({ title: '加载中' });

    // 添加默认参数
    options.url = 'https://api.example.com' + options.url;
    options.header = {
      ...options.header,
      'Authorization': 'Bearer ' + store.getters.token
    };

    return new Promise((resolve, reject) => {
      uni.request({
        ...options,
        success: (res) => {
          // 响应拦截器
          uni.hideLoading();
          if (res.statusCode === 200) {
            resolve(res.data);
          } else {
            uni.showToast({ title: '请求异常', icon: 'none' });
            reject(res);
          }
        },
        fail: (err) => {
          uni.hideLoading();
          uni.showToast({ title: '网络出错', icon: 'none' });
          reject(err);
        }
      });
    });
  }
};

在这个结构里,你可以在每次请求发出前统一加header、显示loading,在收到响应后判断状态码、隐藏loading、弹提示等。

二、常见错误类型及处理策略

网络请求可能遇到的错误大致分为三类:网络层错误(如无网、超时)HTTP 错误(如404、500)业务层错误(如 token 失效、权限不足)

针对这几种情况,我们可以做不同的处理:

  • 网络错误:弹窗提示用户检查网络连接,或者尝试重新发送一次。
  • HTTP 状态码非 200:记录日志,展示通用错误信息。
  • 业务错误:根据后端返回的特定字段(如 code !== 0)来提示具体问题,甚至触发特定行为(如跳回登录页)。

举个例子:

if (res.code === 401) {
  uni.showToast({ title: '身份已过期,请重新登录', icon: 'none' });
  setTimeout(() => {
    uni.reLaunch({ url: '/pages/login/login' });
  }, 1500);
}

这类处理放在拦截器中会更集中,也更容易维护。

Runway
Runway

Runway是一个AI创意工具平台,它提供了一系列强大的功能,旨在帮助用户在视觉内容创作、设计和开发过程中提高效率和创新能力。

下载

三、如何实现全局错误监听与自动重试

uni-app本身没有提供全局错误监听机制,但可以通过封装的方式来实现类似功能。例如,在封装的http.js中统一处理错误,并对外暴露一个可配置的错误回调函数。

此外,还可以加上简单的重试机制,比如在失败时自动重试一次:

let retryCount = 0;

function requestWithRetry(options) {
  return new Promise((resolve, reject) => {
    const doRequest = () => {
      http.request(options)
        .then(resolve)
        .catch((err) => {
          if (retryCount < 1) {
            retryCount++;
            uni.showToast({ title: '正在重试...', icon: 'loading' });
            setTimeout(doRequest, 1000);
          } else {
            reject(err);
          }
        });
    };
    doRequest();
  });
}

这种做法适用于一些偶发性错误,比如短暂断网、服务器不稳定等情况。

四、小技巧:把拦截器做得更灵活一点

如果你希望拦截器能根据不同环境(开发/生产)或不同模块做差异化处理,可以在封装的时候预留钩子函数,或者引入配置项。

比如:

const config = {
  enableLog: process.env.NODE_ENV === 'development',
  timeout: 10000
};

// 在拦截器中使用 config.enableLog 打印调试信息

这样既能方便调试,又不会影响线上行为。


基本上就这些了。拦截器不是什么高深技术,但用好了可以让整个项目的网络请求变得更规范、易维护。关键是把它封装好之后坚持使用,而不是到处写裸的uni.request

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6097

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

808

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1062

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1257

2024.03.01

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1023

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

447

2025.12.29

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

11

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 47.9万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号